我尝试使用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 = NSNumberFormatterNoStyle
和NSNumberFormatterDecimalStyle
,但它没有任何变化。
答案 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"
?