0

作为格式化非常大、精确的数字的快速测试,我正在做:

(数字是合成的 NSDecimalNumber...)
number = [[NSDecimalNumber alloc] initWithDecimal:[[NSDecimalNumber numberWithDouble:420000008698643507200000.0F] decimalValue]];
DLog(@"未格式化:%@", [数字字符串值]);

这给了我:“未格式化:420000008698643507200000”

但是当我尝试通过 格式化它时NSNumberFormatter,它就很不对劲了……四舍五入之类的……

  numFormatter = [[NSNumberFormatter alloc] init];
  [numFormatter setNumberStyle:kCFNumberFormatterDecimalStyle];
  [numFormatter setRoundingMode:kCFNumberFormatterRoundDown];
  [numFormatter setMaximum:nil];

  DLog(@"格式化:%@", [numFormatter stringFromNumber:number]);

给我:“格式化:420,000,008,698,644,000,000,000”

我希望有一些NSNumberFormatter我没有看到的秘密魔法属性,但我试过了setUsesSignificantDigitssetMaximumSignificantDigits但似乎没有用。

有人有想法么?非常感谢!

4

1 回答 1

1

您的精度损失来自NSNumberFormatter将数字转换为双精度的事实。

你考虑过使用NSDecimalNumber's descriptionWithLocale:方法吗?作为起点,您可以[NSLocale currentLocale]作为参数传入。NSLocaleDecimalSeparator然后您可以通过和开始使用区域设置配置NSLocaleGroupingSeparator

于 2009-07-10T04:32:52.120 回答