1

通貨価値があると困ります

999999999999999999.99

その値から、文字列として表示したい。問題は、値が常にに丸められることです

1000000000000000000.00

その値が丸められるとは思わない。元の値を表示したい。この問題を解決する方法はありますか?stackoverflow.com のいくつかの回答/チュロリアルからこのコードを試しました:

NSMutableString *aString = [NSMutableString stringWithCapacity:30];

NSNumberFormatter *aCurrency = [[NSNumberFormatter alloc]init];
[aCurrency setFormatterBehavior:NSNumberFormatterBehavior10_4];
[aCurrency setNumberStyle:NSNumberFormatterCurrencyStyle];   
[aCurrency setMinimumFractionDigits:2];
[aCurrency setMaximumFractionDigits:2];
[aString appendString:[aCurrency stringFromNumber:productPrice]];
//productPrice is NSDecimalNumber which is have value 999999999999999999.99

cell.textLabel.text = aString;
NSLog(@"the price = %@",cell.textLabel.text);
//it prints $1,000,000,000,000,000,000.00
[aCurrency release];
4

2 に答える 2

4

よほどの理由がない限り、通常は通貨の値を浮動小数点ではなく固定小数点形式で保持することをお勧めします。Ada はこれを直接サポートしていますが、C っぽい言語では、ドルではなくペニー単位で値を保持し、表示するたびに変換のみを行います。

したがって、この場合、productPrice の値は 99999999999999999999 (セント) になります。表示するには、次のようにします (これが C の場合。言語はわかりません)。

int const modulus = productPrice % 100;
printf ("The price = %d.%d\n", (int) ((productPrice - modulus) / 100), modulus);

ほとんどの場合、浮動小数点変数ではなく整数を使用して値を保持します。この場合、(64 ビット整数を使用したとしても) 値が気が遠くなるほど大きいため、機能しません。私たちは、米国の国債よりも100 万倍大きいことを話しているのです。私の生涯でこれほど大きな金額が意味をなすとしたら、私たちは皆大きな問題を抱えています.

于 2010-02-05T13:52:46.700 に答える
0

これらを試しましたか:

* – setRoundingBehavior:
* – roundingBehavior
* – setRoundingIncrement:
* – roundingIncrement
* – setRoundingMode:
* – roundingMode
于 2010-02-05T13:43:04.580 に答える