【发布时间】:2015-07-03 04:09:37
【问题描述】:
我的文件中有数字(因此,作为字符串)以科学记数法表示,例如:
8.99284722486562e-02
但我想将它们转换为:
0.08992847
有没有内置函数或者其他方法可以实现?
【问题讨论】:
-
您是否考虑过单独搜索:1.如何将字符串转换为数字; 2.如何将数字转换为字符串?这并不难。
我的文件中有数字(因此,作为字符串)以科学记数法表示,例如:
8.99284722486562e-02
但我想将它们转换为:
0.08992847
有没有内置函数或者其他方法可以实现?
【问题讨论】:
我做出这个回答是因为投票最多的人有错误信息,所以我可以解释我的改进。
TL;DR:使用("%.17f" % n).rstrip('0').rstrip('.')
默认情况下,如果开头有 5 个或更多零,则 Python 会格式化为科学记数法。0.00001 / 1e-05 格式化为 "1e-05"。0.0001 / 1e-04 格式化为 @987654327 @。
所以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 个或更多零为科学)
【讨论】:
我很确定你可以这样做:
float("8.99284722486562e-02")
# and now with 'rounding'
"{:.8f}".format(float("8.99284722486562e-02"))
【讨论】:
print("%.8f" %s) 或print("{0:.8f}".format(s))
float('{:.8f}'.format(float("8.99284722486562e-02"))).
"{:.8f}.format 应该是 "{:.8f}".format 缺少双引号
您可能知道浮点数存在精度问题。例如,评估:
>>> (0.1 + 0.1 + 0.1) == 0.3
False
相反,您可能想要使用Decimal 类。在python解释器处:
>>> import decimal
>>> tmp = decimal.Decimal('8.99284722486562e-02')
Decimal('0.0899284722486562')
>>> decimal.getcontext().prec = 7
>>> decimal.getcontext().create_decimal(tmp)
Decimal('0.08992847')
【讨论】: