5

我想在 Cocoa-Touch 上创建具有正确本地化的浮点数的格式化输出。输出应该等价于printf("%<a>.<b>f", n),其中<a>是总位数,<f>是最大小数位数。

NSNumberFormatterwith <a>=6and的设置<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?

4

1 回答 1

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

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

于 2013-06-13T18:22:53.350 回答