Обнаружение фракции с использованием NSScanner в Objective-C - PullRequest
0 голосов
/ 04 апреля 2019

Я получаю некоторый пользовательский ввод в текстовое поле, которое может содержать числа или дробь.

Для большинства чисел следующий метод может найти целое число.Однако, если вы даете ему 1/2, он возвращает 1 и выбрасывает / и 2

Что мне нужно сделать, чтобы заставить его распознать 1/2 и вернуть .5

Спасибодля любых предложений:

-(float) getFloatPartOfString:(NSString*) numstr {
    numstr = @"1/2";
    NSScanner *scanner = [NSScanner scannerWithString:numstr];
    NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789."];
    NSString* numberString;

    // Throw away characters before the first number.
    [scanner scanUpToCharactersFromSet:numbers intoString:NULL];

    // Collect numbers.
    [scanner scanCharactersFromSet:numbers intoString:&numberString];
    float number = numberString.floatValue;
    NSLog(@"1/2 turns into:%f",number);
    return number;
}

1 Ответ

2 голосов
/ 05 апреля 2019

Поскольку вам нужно преобразовать дробь в десятичную дробь, я бы отсканировал два числа и /, а затем вы можете выполнить математические вычисления для двух чисел.

- (float)getFloatPartOfString:(NSString *)numstr {
    NSScanner *scanner = [NSScanner scannerWithString:numstr];
    int numerator = 0;
    int denominator = 0;

    float number = 0;
    if ([scanner scanInt:&numerator]) && [scanner scanString:@"/" intoString:nil] && [scanner scanInt:&denominator] {
        number = (float)numerator / (float)denominator;
    } else {
        NSLog(@"Didn't find integer / integer");
    }

    NSLog(@"%@ turns into %f", numstr, number);

    return number;
}

Примечание - вышеприведенное не проверено, поэтому возможна ошибка. Не стесняйтесь исправлять любые ошибки.

...