2009-03-31 10 views
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はなぜ丸めを主張するのですか?

答えて

4

NSNumberFormatterは、表示する前に数値を2倍に変換するので、それはあなたが望むものではありません。 NSDecimalNumberには、お客様のニーズに合わせてdescriptionWithLocale:メソッドがあります。 link

+0

実は、私の元のコードでは、私は、二重を与えられ、それをフォーマットする必要がありますよ:

この回答を参照してください。私はちょうどそれが何か違いがあったかどうかを調べるためにNSDecimalNumberを試してみました。 NSNumberFormatterがdoubleからstringに変換するときに、この精度の低下を避ける方法はないと思いますか? – thrusty

+0

倍精度は、17から18桁までの小数点以下桁の精度で始まります:http://cboard.cprogramming.com/c-programming/93742-extended-vs-double-precision.html NSNumberFormatterは、すでに失われた情報を回復することはできません – rpetrich

関連する問題