如何将指数值转换为十进制值
How to convert Exponential Value to Decimal Value
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”
任何帮助将不胜感激。
let balance = "2.477854178281608e-06"
// I have to convert this exponential value in Decimal
这不是指数值。这是一个字符串,表示使用指数格式的数字。您似乎想要一个以不同格式表示相同数字的字符串。这里重要的是,两个字符串都不是 "the value." 无论表示形式如何,值都是相同的(或者如果表示形式有限,则大致相同)。
所以首先你需要字符串表示的值。为此,请将其转换为 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
。这避免了 decimal/binary 舍入,但对于某些类型的数学而言不太方便且速度较慢。如果这是一种以 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
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”
任何帮助将不胜感激。
let balance = "2.477854178281608e-06"
// I have to convert this exponential value in Decimal
这不是指数值。这是一个字符串,表示使用指数格式的数字。您似乎想要一个以不同格式表示相同数字的字符串。这里重要的是,两个字符串都不是 "the value." 无论表示形式如何,值都是相同的(或者如果表示形式有限,则大致相同)。
所以首先你需要字符串表示的值。为此,请将其转换为 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
。这避免了 decimal/binary 舍入,但对于某些类型的数学而言不太方便且速度较慢。如果这是一种以 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