web-dev-qa-db-ja.com

Objective Cでの浮動小数点のフォーマット

浮動小数点数(キャッチーなタイトル、彼?)を小数点以下2桁にフォーマットする必要がありますが、これらの小数点以下の桁にゼロ以外の値がある場合に限ります。例:

「answer」という名前のNSTextFieldがあります。2、3のフロートを使って計算を行った後、「answerFloat」変数を「answer」NSTextFieldに割り当てます。これまでのところ私は持っています:

[answer setStringValue:[NSString stringWithFormat:@"%.2f", answerFloat]];

しかし、それは45から45.00のようなものを設定します。整数をゼロなしで表示し、10進数をそれぞれの10進数値とともに表示したい。

StringWithFormatに渡す前に、何らかのチェックを実行する必要がありますか?それともNSStringはこれを処理する方法を提供していますか?

33
Adam Tootle

%gフォーマット指定子?

NSLog([NSString stringWithFormat:@"%g, %g", 45.0, 45.5]);

2010-01-12 19:54:38.651 foo [89884:10b] 45、45.5

45
Mark Bessey

%gの問題は、丸めの増分を指定する方法がないことです(少なくとも、私が見つけることはできません)。

このようなNSNumberFormatterを使用して、小数点以下の桁数が未定義の数値で結果を得ることができます。

double none = 5;
double one = 5.1;
double two = 5.01;
double lots = 5.918286558251858392107584219;

NSNumber *numberNone = [NSNumber numberWithDouble:none];
NSNumber *numberOne = [NSNumber numberWithDouble:one];
NSNumber *numberTwo = [NSNumber numberWithDouble:two];
NSNumber *numberLots = [NSNumber numberWithDouble:lots];

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.roundingIncrement = [NSNumber numberWithDouble:0.01];
formatter.numberStyle = NSNumberFormatterDecimalStyle;

NSLog(@"%@",[formatter stringFromNumber:numberNone]);
NSLog(@"%@",[formatter stringFromNumber:numberOne]);
NSLog(@"%@",[formatter stringFromNumber:numberTwo]);
NSLog(@"%@",[formatter stringFromNumber:numberLots]);

出力:

2012-02-15 16:21:17.469 AwakeFromNib[53043:f803] 5
2012-02-15 16:21:17.470 AwakeFromNib[53043:f803] 5.1
2012-02-15 16:21:17.470 AwakeFromNib[53043:f803] 5.01
2012-02-15 16:21:17.471 AwakeFromNib[53043:f803] 5.92
23
Mark Suman

NSNumberFormatterを検索します。

3
NSResponder

最大限の柔軟性を得るには、 NSFormatterのカスタムサブクラス の実装を検討できます。 Cocoaのデータフォーマットプログラミングガイド には他の顕著なヒントがあるかもしれません。

2
mrkj