NSNumberFormatter w / currency和NSDecimalNumber; $ 9.95 == 9.949999999999999

时间:2014-08-04 01:34:23

标签: objective-c nsnumberformatter nsdecimalnumber

我使用NSNumberFormatter获取字符串货币的对象值。无论我尝试什么组合设置,我总是会得到奇怪的精度错误。

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle];
[numberFormatter setGeneratesDecimalNumbers:YES];
[numberFormatter setMaximumFractionDigits:2];
[numberFormatter setMinimumFractionDigits:2];
[numberFormatter setRoundingIncrement:@(0.01)];
NSDecimalNumber *value;
[numberFormatter getObjectValue:&value forString:@"$9.95" errorDescription:nil];
NSLog(@"value is %@ class %@", value,[value class]);

产地:

2014-08-03 19:25:17.640 Test[50776:60b] value is 9.949999999999999 class NSDecimalNumber

似乎minFractionDigits,maxFractionDigits和roundingIncrement仅在将值格式化为字符串而不是将字符串转换为数字的上下文中相关。对我来说更令人困惑的是NSNumberFormatter正在使用NSDecimalNumber,它应该避免这些类型的精度问题。

我错过了一些完全明显的东西吗?

0 个答案:

没有答案