将科学计数法转换为小数

Convert scientific notation to decimals

我在文件中有数字(因此,作为字符串)以科学记数法表示,例如:

8.99284722486562e-02 

但我想将它们转换为:

0.08992847

是否有任何内置函数或任何其他方法可以做到这一点?

我很确定你可以这样做:

float("8.99284722486562e-02")
# and now with 'rounding'
"{:.8f}".format(float("8.99284722486562e-02"))

科学计数法可以用float转换为浮点数。

在 [1] 中:float("8.99284722486562e-02")
输出 [1]:0.0899284722486562

float可以用format四舍五入然后float可以用在字符串上return最后的圆形浮点数。

在 [2] 中:float("{:.8f}".format(float("8.99284722486562e-02")))
输出 [2]:0.08992847

您可能知道浮点数存在精度问题。例如,评估:

>>> (0.1 + 0.1 + 0.1) == 0.3
False

您可能想使用 Decimal class。在 python 解释器处:

>>> import decimal
>>> tmp = decimal.Decimal('8.99284722486562e-02')
Decimal('0.0899284722486562')
>>> decimal.getcontext().prec = 7
>>> decimal.getcontext().create_decimal(tmp)
Decimal('0.08992847')

我正在做这个答案,因为投票最高的人有错误信息,所以我可以解释我的改进。

TL;DR: 使用 ("%.17f" % n).rstrip('0').rstrip('.')


如果开头有 5 个或更多个零,默认情况下 Python 格式为科学记数法。
0.00001 / 1e-05 格式为 "1e-05".
0.0001 / 1e-04 格式为 "0.0001".

当然 8.99284722486562e-02 已经格式化为 "0.0899284722486562"
一个更好的例子是 8.99284722486562e-05。 (0.00008992847224866)

我们可以使用 "%f" 轻松格式化为原始小数位,默认情况下与 "%.6f" 相同。
"%f" % 8.99284722486562e-05 产生 '0.000090'.
"%f" % 0.01 产生 '0.010000'.


默认情况下浮点数最多显示 17 位小数。
0.1234567898765432123 - (19 dp 输入)
0.12345678987654321 - (17 dp 输出)

所以如果我们这样做 "%.17f" % 8.99284722486562e-02,我们会得到 '0.08992847224865620'。 (注意多出来的0)
但是如果我们做了 "%.17f" % 0.0001 我们肯定不会想要 '0.00010000000000000'.

所以要删除尾随零,我们可以这样做:("%.17f" % n).rstrip('0').rstrip('.')
(请注意,我们还去掉了小数点,以防数字中没有小数)


还有 %f 的对应物:
%f 显示标准符号
%e 显示科学记数法
%g 显示默认值(如果有 5 个或更多零则科学)