使用 NSNumberFormatter 格式化字符串
Formatting a string with NSNumberFormatter
我有我的这个应用程序,其中一个文本字段的行为必须像计算器显示一样。此文本字段显示的数字是由函数计算得出的。例如,如果数字是“3.21”,则应像这样显示,保留 2 位小数。如果数字有更多的小数位,则应该显示它的小数位数。
文本框允许显示 10 位数字。
如果数字大于 9999999999(10 个九),则应以科学记数法显示,例如“4.767 E20”或类似的东西。
我想我必须为此使用 NSNumberFormatter
但我看到我将有一系列的 ifs 和一系列复杂的 NSNumberFormatter
s 来完成这项工作,特别是对于数字小数位数。
我的问题是:这是要走的路还是有某种 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 中,您将使用 NSString
的 stringWithFormat
方法,并使用格式字符串 @"%.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);
}
我有我的这个应用程序,其中一个文本字段的行为必须像计算器显示一样。此文本字段显示的数字是由函数计算得出的。例如,如果数字是“3.21”,则应像这样显示,保留 2 位小数。如果数字有更多的小数位,则应该显示它的小数位数。
文本框允许显示 10 位数字。
如果数字大于 9999999999(10 个九),则应以科学记数法显示,例如“4.767 E20”或类似的东西。
我想我必须为此使用 NSNumberFormatter
但我看到我将有一系列的 ifs 和一系列复杂的 NSNumberFormatter
s 来完成这项工作,特别是对于数字小数位数。
我的问题是:这是要走的路还是有某种 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 中,您将使用 NSString
的 stringWithFormat
方法,并使用格式字符串 @"%.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);
}