当我尝试通过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等),记录的结果与传递给numberFromString方法的NSString完全相同。
我使用的是XCode 4.1和4.3模拟器。如果我放入(或不放) setMaximumFractionDigits或/和setPositiveFormat没有区别,结果总是8.800000000000001。这是怎么回事?
发布于 2011-09-29 07:47:50
大多数不是整数的数字不能在浮点变量中准确地表示。有一个以开销为代价处理精确值的类NSDecimalNumber,它主要用于货币计算。
请参阅:WIkipedia:
浮点数是有理数,因为它们可以表示为一个整数除以另一个整数。但是,基数决定了可以表示的分数。例如,1/5不能用二进制基精确表示为浮点数,但可以用十进制基数精确表示。
https://stackoverflow.com/questions/7590926
复制相似问题