3

長い値から適切にフォーマットされた通貨を正しく表示しようとしています。NSNumberFormatterを使用していますが、セントが入る小数点以下の桁数が切り捨てられているようです。

たとえば、1203(セント)の長い値がある場合、固定小数点形式(12.03など)にします。これが私がしたことです:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
formatter.currencyCode = "USD";
formatter.multiplier = [NSNumber numberWithDouble:0.01];
long currencyAmount = 1203;
NSNumber *number = [NSNumber numberWithLongLong:currencyAmount];
[label setText:[formatter stringFromNumber:number]];

この出力は$12.00ですが、$12.03が必要です。

4

2 に答える 2

2

内部の整数カットオフバグを考えるのNSNumberFormatterはおかしな憶測ですが、デフォルトの乗数1を試し、フロートに変換した後の通貨額を自分で100で割ったことがありますか?

編集:この回避策については、次の投稿で、NSDecimalNumber丸めの問題を回避するための使用を提案しています。フロートで機能しない通貨をフォーマットするNSNumberFormatter

于 2013-01-17T23:16:17.197 に答える
1

私は答えを見つけました。これにより、long /longlong値が通貨に適切にフォーマットされます。

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
formatter.currencyCode = "USD";
long currencyAmount = 1203;
NSDecimalNumber *wrappedCurrencyAmount = [NSDecimalNumber decimalNumberWithMantissa:currencyAmount exponent:-2 isNegative:NO];
[label setText:[formatter stringFromNumber:wrappedCurrencyAmount]];
于 2013-01-17T23:46:07.187 に答える