2010-09-16 45 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方法。