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

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

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

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

我建议您使用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); 

你对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”。

这是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)