我想将此数字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消失了,并添加了另外两个零。
我该如何解决?
答案 0 :(得分:1)
那是由于Double
的不精确性。如果使用Decimal
,则不会遇到此问题。
您也不需要该解决方法来添加前导0
,只需将minimumIntegerDigits
设置为1。您也不需要转换为NSNumber
,{{ 1}}的方法NumberFormatter
接受string(for:)
个数字类型(例如Swift
或Double
)。
Decimal