Sou*_*men 1 number-formatting swift
let balance = "2.477854178281608e-06"
// I have to convert this exponential value in Decimal
Run Code Online (Sandbox Code Playgroud)
/* 已经尝试了下面提到的解决方案,但不起作用 */
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
let finalNumber = numberFormatter.number(from: balance)
print(finalNumber!)
Run Code Online (Sandbox Code Playgroud)
值正在打印“2.477854178281608e-06\n”
任何帮助将不胜感激。
let balance = "2.477854178281608e-06"
// I have to convert this exponential value in Decimal
Run Code Online (Sandbox Code Playgroud)
这不是指数值。这是一个使用指数格式表示数字的字符串。您似乎想要一个以不同格式表示相同数字的字符串。这里重要的是,这两个字符串都不是“值”。无论表示如何,该值都是相同的(或者如果表示有限,则近似相同)。
因此,首先您需要字符串表示的值。为此,请将其转换为 Double。
let value = Double(balance)!
Run Code Online (Sandbox Code Playgroud)
现在,您说您想将其转换为十进制格式的字符串(我假设您的意思是0.000...)。所以你需要一个格式化程序:
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.maximumFractionDigits = 20
let string = numberFormatter.string(for: value)!
print(string) // 0.00000247785417828161
Run Code Online (Sandbox Code Playgroud)
您会注意到该值与之前的值略有不同。这是因为处理这么小的值时会出现舍入误差。
如果所有这些以 10 为基数的数字都很重要,您可以使用类型Decimal而不是Double。这避免了十进制/二进制舍入,但对于某些类型的数学来说不太方便且速度较慢。如果这是一种以 10 为基数的单位(基本上是所有单位)表示的货币类型,那么您总是希望使用Decimal而不是使用Double。
let balance = "2.477854178281608e-06"
let value = Decimal(string: balance)!
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.maximumFractionDigits = 21
let string = numberFormatter.string(for: value)!
print(string) // 0.000002477854178281608
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2816 次 |
| 最近记录: |