如何在iOS上格式化和打印浮点数?

时间:2012-07-19 10:13:23

标签: cocoa-touch nsnumberformatter

我想创建一个浮点数的格式化输出,并在Cocoa-Touch上进行正确的本地化。输出应与printf("%<a>.<b>f", n)的输出相同,其中<a>是总位数,<f>是小数位的最大位数。

使用NSNumberFormatter<a>=6 设置<f>=2 :(平台是iOS 5.1 SDK,Xcode 4.3.3和iPhone模拟器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]。结果未更改,似乎忽略了小数位。将语言区域更改为仅将,更改为.,而不是小数位数。

问题:如何将printf - 格式字符串正确翻译为NSNumberFormatter

1 个答案:

答案 0 :(得分:11)

瑞恩并非完全错误。使用localizedStringWithFormat方法:

使用objective-c

NSNumber *yourNumber = [nf numberFromString:yourString];
//to create the formatted NSNumber object

NSString *yourString = [NSString localizedStringWithFormat:@"%.2F", yourNumber];
//to create the localized output

使用SWIFT 3

let yourString: String
yourString = String.localizedStringWithFormat("%.2F", yourDoubleNumber) //no need for NSNumber Object

有点晚了,但它仍然有帮助。祝你好运!