[英]NSNumberFormatter bug?
当我尝试通过NSNumberFormatter将NSString @"8.8"
转换为NSNumber时
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2];
[formatter setPositiveFormat:@"###0.##"];
NSNumber *result = [formatter numberFromString:@"8.8"];
NSLog(@"%@", [result stringValue]);
[formatter release];
结果是8.800000000000001
。
对于任何其他值(即: 6.6
, 7.7
, 9.9
, 1.2
, 4.7
等等),记录的结果是完全一样的NSString传递给numberFromString
方法。
我正在使用XCode 4.1和4.3模拟器。 如果我放置(或不放置) setMaximumFractionDigits
或/和setPositiveFormat
没有区别,则结果始终为8.800000000000001
。 怎么了?
非整数的大多数数字无法在浮点变量中准确表示。 有一个NSDecimalNumber
类,它会以开销为代价处理精确值,该类主要用于货币计算。
请参阅: WIkipedia :
浮点数是有理数,因为它们可以表示为一个整数除以另一个整数。 但是,基数确定了可以表示的分数。 例如,不能使用二进制基数将1/5精确地表示为浮点数,而可以使用十进制基数精确地表示1/5。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.