在 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;
}
注意 - 以上内容未经测试,因此可能存在错误。如有错误,请随时编辑。
我在可以包含数字或分数的文本框中收到一些用户输入。
对于大多数数字,以下方法可以找到一个整数。但是,如果你给它 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;
}
注意 - 以上内容未经测试,因此可能存在错误。如有错误,请随时编辑。