使用NumberFormatter Precision,大于或等于一千万的数字

时间:2017-06-03 09:49:50

标签: swift nsnumberformatter

这是我的代码

extension Float {
    func decimalString(maxPrecision: UInt) -> String {
        let formatter = NumberFormatter()
        formatter.numberStyle = .decimal
        formatter.maximumFractionDigits = Int(maxPrecision)
        return formatter.string(from: NSNumber(value: self)) ?? ""
    }
}

但是有问题

let a: Float = 12345678.1
print("\(a.decimalString(maxPrecision: 2))")

印刷12,345,680,但预计12,345,678.1 什么错了!?!

1 个答案:

答案 0 :(得分:1)

Double表示64位浮点数 Float表示32位浮点数。

所以Double更精确,请改用此代码:

extension Double {
    func decimalString(maxPrecision: UInt) -> String {
        let formatter = NumberFormatter()
        formatter.numberStyle = .decimal
        formatter.maximumFractionDigits = Int(maxPrecision)
        return formatter.string(from: NSNumber(value: self)) ?? ""
    }
}

let a: Double = 12345678.1
print("\(a.decimalString(maxPrecision: 2))") // 12,345,678.1