0

私が行っている非常に大きく正確な数値のフォーマットの簡単なテストとして:

(数値は合成された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魔法の性質があるといいのですが、やってみsetUsesSignificantDigitsましsetMaximumSignificantDigitsたが、うまくいかなかったようです。

誰かアイデアはありますか?本当にありがとう!

4

1 に答える 1

1

精度の低下はNSNumberFormatter、数値を2倍に変換するという事実に起因します。

メソッドの使用を検討しましたNSDecimalNumber's descriptionWithLocale:か?[NSLocale currentLocale]開始点として、パラメータとして渡すことができます。NSLocaleDecimalSeparator次に、とを使用してロケール構成の操作を開始できますNSLocaleGroupingSeparator

于 2009-07-10T04:32:52.120 に答える