2
私はこのような大規模な通貨の数値をフォーマットしようとしている:iPhone NSNumberFormatterが丸められないようにするにはどうすればよいですか?
NSNumber *testVal = [NSDecimalNumber decimalNumberWithString: @"999999999999999993.00"];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setMaximumIntegerDigits:19];
[formatter setMaximumFractionDigits:0];
NSNumberFormatter *formatter = [Formatters numberFormatterForField:f];
NSLog([formatter stringFromNumber:testVal]);
が一瞬ロケールの影響を無視して、私は一貫して丸めにかかわらず、次の出力を得ることを見つける:
1,000,000,000,000,000,000
私は期待しています:
999,999,999,999,999,993
私は効果なしで丸めを変更しようとしました。 NSNumberFormatter
はなぜ丸めを主張するのですか?
実は、私の元のコードでは、私は、二重を与えられ、それをフォーマットする必要がありますよ:
この回答を参照してください。私はちょうどそれが何か違いがあったかどうかを調べるためにNSDecimalNumberを試してみました。 NSNumberFormatterがdoubleからstringに変換するときに、この精度の低下を避ける方法はないと思いますか? – thrusty
倍精度は、17から18桁までの小数点以下桁の精度で始まります:http://cboard.cprogramming.com/c-programming/93742-extended-vs-double-precision.html NSNumberFormatterは、すでに失われた情報を回復することはできません – rpetrich