Cocoa-Touch で正しいローカリゼーションを使用して、浮動小数点数のフォーマット済み出力を作成したいと考えています。出力は の出力と同等になるはずですprintf("%<a>.<b>f", n)
。ここ<a>
で、 は総桁<f>
数、 は小数部の最大桁数です。
NSNumberFormatter
と<a>=6
のセットアップ<f>=2
: (プラットフォームは iOS 5.1 SDK、Xcode 4.3.3、および iPhone Simulator 5.1)
NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
[nf setNumberStyle:NSNumberFormatterDecimalStyle];
[nf setPaddingCharacter:@" "];
[nf setUsesGroupingSeparator:NO];
[nf setLocale:[NSLocale autoupdatingCurrentLocale]];
[nf setUsesSignificantDigits:YES];
[nf setMaximumSignificantDigits:6];
[nf setMaximumFractionDigits:2];
[nf setRoundingMode:NSNumberFormatterRoundFloor];
NSLog(@"Test: %@", [nf stringFromNumber:[NSNumber numberWithDouble:2.64324897]]);
予想される出力(ドイツ語ロケールを使用):Test: 2,64
観測された出力(ドイツ語ロケール):Test: 2,64324
[nf setMaximumFractionDigits:4]
その他の観察: 分数の桁に異なる値を使用しようとしました[nf setMaximumFractionDigits:0]
。結果は変わりません。小数桁が無視されているようです。ロケールを US に変更すると、小数点以下の桁数ではなく、,
が a に変更されるだけです。.
質問printf
: -format 文字列を正しく変換するにはどうすればよいNSNumberFormatter
ですか?