使用 NSNumberFormatter 格式化字符串

Formatting a string with NSNumberFormatter

我有我的这个应用程序,其中一个文本字段的行为必须像计算器显示一样。此文本字段显示的数字是由函数计算得出的。例如,如果数字是“3.21”,则应像这样显示,保留 2 位小数。如果数字有更多的小数位,则应该显示它的小数位数。

文本框允许显示 10 位数字。

如果数字大于 9999999999(10 个九),则应以科学记数法显示,例如“4.767 E20”或类似的东西。

我想我必须为此使用 NSNumberFormatter 但我看到我将有一系列的 ifs 和一系列复杂的 NSNumberFormatters 来完成这项工作,特别是对于数字小数位数。

我的问题是:这是要走的路还是有某种 NSNumberFormatter 可以自动执行此操作?

您根本不需要使用数字格式化程序。您可以使用 Swift 或 Objective-C 中的 %g 格式字符串。 Swift 代码如下所示:

import UIKit
var value = 0.0
for digits in 1...12 {
  value = value * 10 + 9
  print(String(format:"%.10g", value))
}

产生结果:

9
99
999
9999
99999
999999
9999999
99999999
999999999
9999999999
1e+11
1e+12

在 Objective-C 中,您将使用 NSStringstringWithFormat 方法,并使用格式字符串 @"%.10g"

我的 Objective-C 生锈了,但代码看起来像这样:

double value = 0;
for (int x = 0; x < 12; x++) {
  value = value * 10 + 9;
  NSString *result = [NSString stringWithFormat: @"%.10g", value];
  NSLog(@"value = %@", result);
}