在 Objective-C 中使用 NSScanner 检测分数

Detect fraction using NSScanner in Objective-C

我在可以包含数字或分数的文本框中收到一些用户输入。

对于大多数数字,以下方法可以找到一个整数。但是,如果你给它 1/2 returns 1 并扔掉 / 和 2

我需要做什么才能让它识别 1/2 和 return .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;
}

由于您需要将分数转换为小数,我会扫描这两个数字和 / 然后您可以对这两个数字进行数学运算。

- (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;
}

注意 - 以上内容未经测试,因此可能存在错误。如有错误,请随时编辑。