Ios Swift:距离格式

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

我需要把米的距离转换成公里。 例如,我有以下仪表阵列:

[101005000200001800001805001800000]

现在我想把这些值以公里为单位,总共至少3位数。但前提是距离小于100公里

[0,01;0,10;5,00;20,0;180;180;1800]

我已尝试使用数字格式:

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"]