5

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

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

4

3 回答 3

11

我通过IEEE 规范审查了“格式字符串”的功能,据我了解,您希望的行为是不可能的。

我向您推荐使用 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);
于 2011-09-02T15:16:02.443 回答
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"。

于 2011-09-01T16:54:13.510 回答
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)
于 2018-01-22T23:50:45.793 回答