在Swift中将很长的Double转换为String

时间:2019-06-24 10:06:28

标签: swift string type-conversion double nsnumberformatter

我想将此数字12345678901234567000.0转换为String,所以我写了以下扩展名。

extension Double {
    var clean: String {
        let formatter = NumberFormatter()
        let number = NSNumber(value: self)
        formatter.minimumFractionDigits = 0
        formatter.maximumFractionDigits = 16
        let cleanedString = String(formatter.string(from: number) ?? "")
        if let firstLetter = cleanedString.first, firstLetter == "." {
            return "0\(cleanedString)"
        }
        return cleanedString
    }
}


let number = 12345678901234567000.0
print(number.clean) // output is 12345678901234600000

但是它返回错误的数字12345678901234600000,7消失了,并添加了另外两个零。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

那是由于Double的不精确性。如果使用Decimal,则不会遇到此问题。

您也不需要该解决方法来添加前导0,只需将minimumIntegerDigits设置为1。您也不需要转换为NSNumber,{{ 1}}的方法NumberFormatter接受string(for:)个数字类型(例如SwiftDouble)。

Decimal