let balance = "2.477854178281608e-06"
// I have to convert this exponential value in Decimal
/ *已经尝试了下面提到的解决方案,但没有工作* /
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
let finalNumber = numberFormatter.number(from: balance)
print(finalNumber!)
价值是印刷" 2.477854178281608e-06 \ n"
任何帮助将不胜感激。
答案 0 :(得分:4)
let balance = "2.477854178281608e-06"
// I have to convert this exponential value in Decimal
这不是指数值。这是一个字符串,表示使用指数格式的数字。您似乎想要一个以不同格式表示相同数字的字符串。这里重要的是两个字符串都不是“值”。无论表示如何,该值都是相同的(如果表示有限,则值大致相同)。
首先,您需要字符串表示的值。为此,请将其转换为Double。
let value = Double(balance)!
现在,您说要将其转换为十进制格式的字符串(我假设您的意思是0.000...
)。所以你需要一个格式化程序:
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.maximumFractionDigits = 20
let string = numberFormatter.string(for: value)!
print(string) // 0.00000247785417828161
您会注意到此值与之前的值略有不同。那是因为处理这么小的值时存在舍入错误。
如果所有这些基数为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