NSDecimalNumber为长数字

use*_*521 5 numbers nsdecimalnumber nsnumberformatter

我正在尝试让NSDecimalNumber打印出大数字,15位或更多位数.在15位数我看到111,111,111,111,111.超过15位数我看到1,111,111,111,111,110,即使格式化的数字是1111111111111111.

举例说明我的问题:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumSignificantDigits:25];
[formatter setUsesSignificantDigits:true];

NSDecimalNumber* test = [NSDecimalNumber decimalNumberWithString:@"12345678901234567890"];

NSString* output = [formatter stringFromNumber:test]; 
NSLog( @"num value: %@", test ); 
NSLog( @"str value: %@", output );
Run Code Online (Sandbox Code Playgroud)

输出看起来像:

2010-09-16 09:24:16.783 SimpleCalc[739:207] num value: 12345678901234567890
2010-09-16 09:24:16.784 SimpleCalc[739:207] str value: 12,345,678,901,234,600,000
Run Code Online (Sandbox Code Playgroud)

我错过了什么傻事?

Tar*_*ark 3

这里的问题是NSNumberFormatter不进行NSDecimalNumbers内部处理,它们被转换为,double并且您会看到由此产生的精度损失。来自文档:

表示形式包括整数、浮点数和双精度数;浮点数和双精度数可以格式化为指定的小数位。

您可能应该看看- (NSString *)descriptionWithLocale:(NSDictionary *)locale上的方法NSDecimalNumber