NSNumberFormatter numberFromString十进制数

时间:2014-03-14 19:02:18

标签: ios objective-c cocoa-touch nsnumberformatter

我尝试使用NSString跟随NSNumberFormatter进行解析。

NSNumberFormatter *myFormatter = [[[NSNumberFormatter alloc] init];
NSNumber *myNumber = [myFormatter numberFromString:@"42.00000"];

numberFromString会在模拟器中返回NSNumber个对象,但不会在设备上返回。

小数(.00000)导致设备上的返回值为nil,因为解析42(没有小数)工作正常(在模拟器和设备上)。

我使用NSNumberFormatter的原因是因为如果字符串不是有效数字(它在这里对我不利,它会返回nil:p)。 NSString doubleValue不提供此类行为。此外,NSDecimalNumber decimalNumberWithString无法完成工作,因为[NSDecimalNumber decimalNumberWithString:@"4a2.00000"]返回4。

为什么这不适用于设备的任何想法?

是区域设置吗?我尝试设置myFormatter.numberStyle = NSNumberFormatterNoStyleNSNumberFormatterDecimalStyle,但它没有任何变化。

2 个答案:

答案 0 :(得分:12)

正如@rmaddy在评论中所说,NSNumberFormatter的小数分隔符是 区域设置依赖。如果您有一个固定的输入格式,点为小数分隔符, 您可以设置" POSIX区域设置":

NSNumberFormatter *myFormatter = [[NSNumberFormatter alloc] init];
[myFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
NSNumber *myNumber = [myFormatter numberFromString:@"42.00000"];

或者,您可以使用NSScanner来解析double值,例如描述 在这里:parsing NSString to Double

答案 1 :(得分:1)

42.00000不是字符串配对,为什么不是@"42.00000"