質問

非常に大きく、正確な数値をフォーマットする簡単なテストとして、私がやってます:

(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を試してみましたが、それは動作していないようでした。

誰もが任意のアイデアがありますか?おかげでたくさん!

役に立ちましたか?

解決

精度のあなたの損失はNSNumberFormatterが数値をdoubleに変換しているという事実から来ています。

あなたはNSDecimalNumber's descriptionWithLocale:メソッドを使用して考えがありますか?出発点として、あなたはただのparamとして[NSLocale currentLocale]に渡すことができます。そして、あなたはNSLocaleDecimalSeparatorNSLocaleGroupingSeparatorを経由して、ロケール設定で再生を開始することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top