我需要将以米为单位的距离转换为公里。 例如,我有以下仪表表:
[10,100,5000,20000,180000,180500,1800000]
现在,我希望这些值以公里为单位,且整体至少3位数字。但前提是距离小于100公里。
[0,01; 0,10; 5,00; 20,0; 180; 180; 1800]
我已经尝试过使用NumberFormatter:
let numberFormatter = NumberFormatter()
numberFormatter.minimumIntegerDigits = 1
numberFormatter.minimumFractionDigits = 2
numberFormatter.maximumFractionDigits = 2
我是否需要IF / ELSE,或者可以使用常规NumberFormatter来实现? 预先感谢。
答案 0 :(得分:1)
也许这就是您想要的:
let a = [10, 100, 5_000, 20_000, 180_000, 180_500, 1_800_000]
let maxIntegerDigits = Int(log(Float80(Int.max)) + 1)
let formatter = NumberFormatter()
formatter.minimumIntegerDigits = 1
let result: [String] = a.map { distance in
let inKilometers = Double(distance) / 1000
if distance < 10_000 {
formatter.minimumFractionDigits = 2
formatter.maximumFractionDigits = 2
formatter.maximumIntegerDigits = 1
}
else if distance < 100_000 {
formatter.minimumFractionDigits = 1
formatter.maximumFractionDigits = 1
formatter.maximumIntegerDigits = 2
} else {
formatter.minimumFractionDigits = 0
formatter.maximumFractionDigits = 0
formatter.maximumIntegerDigits = maxIntegerDigits
}
return formatter.string(for: inKilometers) ?? ""
}
print(result) //["0.01", "0.10", "5.00", "20.0", "180", "180", "1,800"]
您可以设置数字格式程序的区域设置,以更改分组和小数点分隔符。
答案 1 :(得分:0)
如果您要为此使用NumberFormatter
,则可以创建一种方法,该方法返回所需的小数位数
private func getNumberOfFractionDigits(for number: Double) -> Int {
switch self {
case ..<10:
return 2
case ..<100:
return 1
default:
return 0
}
}
然后只需将格式化程序的maximumFractionDigits
属性设置为getFractionDigits
的结果即可得到您的数字除以千
let dividedNumber = yourNumber / 1000
numberFormatter.numberStyle = .decimal
numberFormatter.maximumFractionDigits = getNumberOfFractionDigits(for: dividedNumber)
let formatedNumber = Double(numberFormatter.string(from: NSNumber(value: dividedNumber))!)!