Ios Swift:距离格式
我需要把米的距离转换成公里。 例如,我有以下仪表阵列: [101005000200001800001805001800000] 现在我想把这些值以公里为单位,总共至少3位数。但前提是距离小于100公里 [0,01;0,10;5,00;20,0;180;180;1800] 我已尝试使用数字格式:Ios Swift:距离格式,ios,swift,Ios,Swift,我需要把米的距离转换成公里。 例如,我有以下仪表阵列: [101005000200001800001805001800000] 现在我想把这些值以公里为单位,总共至少3位数。但前提是距离小于100公里 [0,01;0,10;5,00;20,0;180;180;1800] 我已尝试使用数字格式: let numberFormatter = NumberFormatter() numberFormatter.minimumIntegerDigits = 1 numberFormatter.minim
let numberFormatter = NumberFormatter()
numberFormatter.minimumIntegerDigits = 1
numberFormatter.minimumFractionDigits = 2
numberFormatter.maximumFractionDigits = 2
我需要一个IF/ELSE吗?或者我可以用普通的数字格式来实现这一点吗?
提前感谢。如果您想使用
NumberFormatter
进行此操作,您可以创建一个方法,返回您想要的数字小数位数
private func getNumberOfFractionDigits(for number: Double) -> Int {
switch self {
case ..<10:
return 2
case ..<100:
return 1
default:
return 0
}
}
也许这就是你想要的:
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"]
设a=[10100,5000,2000,180,500,800,000]
设maxIntegerDigits=Int(log(Float80(Int.max))+1)
let formatter=NumberFormatter()
formatter.MinimumIntegraterDigits=1
let result:[String]=a.map{distance in
让inKilometers=两倍(距离)/1000
如果距离小于10_000{
formatter.minimumFractionDigits=2
formatter.maximumFractionDigits=2
formatter.MaximumIntegraterDigits=1
}
否则,如果距离小于100_000{
formatter.minimumFractionDigits=1
formatter.maximumFractionDigits=1
formatter.MaximumIntegraterDigits=2
}否则{
formatter.minimumFractionDigits=0
formatter.maximumFractionDigits=0
formatter.maximumIntegerDigits=maxIntegerDigits
}
返回格式化程序.string(用于:inKilometers)?“”
}
打印(结果)/[“0.01”、“0.10”、“5.00”、“20.0”、“180”、“180”、“1800”]
您可以设置数字格式化程序的区域设置,以便改变分组和小数分隔符。您需要两个格式化程序,但您可能应该考虑使用<代码> MKDistanceFormatter < /代码>。
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"]