2012-05-11 1 views
0

NSNumberFormatterを使用して通貨をフォーマットしていますが、浮動小数点を使用するとフォーマッタが動作しません。しかし、私はダブルを使用すると動作します。私は二重で働く必要がないので、浮動小数点で作業する必要があります。NSNumberFormatterが浮動小数点のために機能しない通貨をフォーマットする

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); 

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

事前に感謝します。

+2

*「私はそれを動作させる必要があります私は二重で働く必要はないので浮動小数点数を使用しています」*結果は、特に浮動小数点を通貨に使用することはお勧めできません。 'double'と' NSDecimalNumber'を使う必要があります。 –

+0

私はどちらを使うべきなのか分かります... NSString * convertedAmount = [フォーマッタstringFromNumber:[NSNumber numberWithDouble:finalAmount]]; OR NSString * convertedAmount = [フォーマッタstringFromNumber:[NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithDouble:finalAmount] decimalValue]]]; – inforeqd

+0

[this stackoverflow question](http://stackoverflow.com/questions/453691/how-use-nsdecimalnumber)によると、 'NSDecimalNumber'を初期化するために' [NSNumber numberWith ...] 'の方法を使うべきではありません。 –

答えて

1

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

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

を(あなたは、変数を移入する方法に応じて、NSDecimalNumberのを作成するための他の方法があることに注意してください。)

関連する問題