0

NSNumberFormatterを使用して通貨をフォーマットしていますが、floatを使用するとフォーマッターが機能しません。ただし、doubleを使用すると機能します。ダブルで作業する必要がないので、フロートで作業する必要があります。

float t1 = 999999.99;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setAllowsFloats:YES];
[formatter setMaximumFractionDigits:2];
[formatter setAlwaysShowsDecimalSeparator:YES];
[formatter setGeneratesDecimalNumbers:YES];
NSString *formattedOutput = [formatter stringFromNumber:[NSNumber numberWithFloat:t1]];
NSLog(@"Output as currency: %@", formattedOutput);

この出力-通貨としての出力:$ 9,99,999.99ではなく、$1,000,000.00

これについてご協力いただきありがとうございます。

4

1 に答える 1

1

浮動小数点数(および倍精度浮動小数点数)の丸めの問題を回避するには、通貨にはNSDecimalNumberを使用する必要があります。質問にリストされている既存のコードはすべて、それらを使用して機能します。フロートを取り除き、代わりに次の行を使用してください。

NSDecimalNumber *t1 = [NSDecimalNumber decimalNumberWithString:@"999999.99"];

(変数の設定方法に応じて、NSDecimalNumberを作成する方法は他にもあることに注意してください。)

于 2012-05-11T05:44:28.537 に答える