如果需要,正确使用格式说明符最多可显示三位小数,否则为零小数?

时间:2011-09-01 14:10:06

标签: objective-c ios nsstring stringwithformat format-specifiers

我发现%g只在需要时显示小数。如果数字是整数,则不添加尾随.000,这样就好了。 但是在例如1.12345的情况下,我希望它将答案缩短为1.123。 在1.000的情况下,我想只显示1,因为%g已经存在。

我试图在字符串中指定%。3g,但这不起作用。 如果有人有答案,我将不胜感激!

3 个答案:

答案 0 :(得分:11)

我通过IEEE Specification查看了“格式字符串”的功能,据我了解,您的行为是不可能的。

我建议您使用NSNumberFormatter类。我写了一个符合你希望的行为的例子。我希望有所帮助:

NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setMaximumFractionDigits:2];
[numberFormatter setDecimalSeparator:@"."];
[numberFormatter setGroupingSeparator:@""];
NSString *example1 = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:123456.1234]];
NSLog(@"%@", example1);
NSString *example2 = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:123456.00]];
NSLog(@"%@", example2);

答案 1 :(得分:2)

你对NSLog有什么看法(@“%。3g”,1.12345)?

我做了一些测试,因为我理解你的问题,你正走在正确的轨道上。这些是我的结果:

NSLog(@"%g", 1.000000);    => 1
NSLog(@"%g", 1.123456789);  => 1.12346
NSLog(@"%.1g", 1.123456789);  => 1
NSLog(@"%.2g", 1.123456789);  => 1.1
NSLog(@"%.3g", 1.123456789);  => 1.12
NSLog(@"%.4g", 1.123456789);  => 1.123

要获得你想要的东西@“%。4g”。

答案 2 :(得分:0)

以下是Jan的Swift 4解决方案:

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.maximumFractionDigits = 2
numberFormatter.decimalSeparator = "."
numberFormatter.groupingSeparator = ""
let example1 = numberFormatter.string(from: 123456.1234)!
print(example1)
let example2 = numberFormatter.string(from: 123456.00)!
print(example2)