使用NSNumberFormatter numberFromString的精度错误

时间:2011-06-20 20:12:25

标签: objective-c ios macos nsnumberformatter

为什么以下代码产生“numberFromString = 9.390000000000001”而不是“numberFromString = 9.39”?

NSNumberFormatter *numFormatter = [[NSNumberFormatter alloc] init];
[numFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numFormatter setPositiveFormat:@"$##0.00"];
[numFormatter setNegativeFormat:@"-$##0.00"];
NSNumber *nTCA = [numFormatter numberFromString:@"$9.39"];

NSLog(@"numberFromString = %@", nTCA);

我在OS X 10.6和iOS 4.3.3上得到了上述结果。

纠正此错误的最佳方法是什么?

由于

1 个答案:

答案 0 :(得分:4)

我怀疑您因使用浮点精度而遇到错误。解决此问题的方法是使用NSDecimalNumber代替NSNumber。关于这个here的帖子很棒。

NSDecimalNumber+ decimalNumberWithString:方法。那会满足你的目的吗?