2009-07-10 53 views
0

使用NSNumberFormatter與NSDecimalNumberHandler的格式非常大​​的,準確的數字的快速測試我做:在iPhone SDK

 
(number is a synthesized NSDecimalNumber...) 
number = [[NSDecimalNumber alloc] initWithDecimal:[[NSDecimalNumber numberWithDouble:420000008698643507200000.0F] decimalValue]]; 
DLog(@"unformatted: %@", [number stringValue]); 

這給了我:「未格式化:420000008698643507200000」

但是當我嘗試通過NSNumberFormatter進行格式化,這是相當關閉...了四捨五入的方式或東西...

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

    DLog(@"formatted: %@", [numFormatter stringFromNumber:number]); 

給我:「格式化:420,000,008,698,644,000,000,000」

我希望有一些祕密NSNumberFormatter魔術屬性,我沒有看到,但我試過setUsesSignificantDigitssetMaximumSignificantDigits,但這似乎並不奏效。

任何人有什麼想法?謝謝一堆!

回答

1

您的精確度損失來自於NSNumberFormatter將該數字轉換爲雙倍的事實。

您是否考慮過使用NSDecimalNumber's descriptionWithLocale:方法?作爲一個起點,你可以通過[NSLocale currentLocale]作爲參數。然後您可以通過NSLocaleDecimalSeparatorNSLocaleGroupingSeparator開始使用語言環境配置。