2010-09-16 87 views
5

我试图让NSDecimalNumber打印出大数字,15个或更多数字。在15位数字处,我看到111,111,111,111,111。上述15位我看到1,111,111,111,111,110即使被格式化的数量是1111111111111111.NSDecimalNumber round long numbers

一个例子来说明我的问题:

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

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

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

和输出的样子:

2010-09-16 09:24:16.783 SimpleCalc[739:207] num value: 123456789
2010-09-16 09:24:16.784 SimpleCalc[739:207] str value: 12,345,678,901,234,600,000 

什么愚蠢的事情有我错过了?

回答

3

这里的问题是,NSNumberFormatter在内部不处理NSDecimalNumbers,它们被转换为double,您会看到由此导致的精度损失。从文档:

该表示包含整数,浮点数和双精度;浮动和双打可以格式化到指定的小数位。

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