将科学计数法转换为小数
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 个或更多零则科学)
我在文件中有数字(因此,作为字符串)以科学记数法表示,例如:
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 个或更多零则科学)