将科学计数法转换为小数

新手上路,请多包涵

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

 8.99284722486562e-02

但我想将它们转换为:

 0.08992847

是否有任何内置功能或任何其他方式来做到这一点?

原文由 mdpoleto 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

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

长话短说 使用 ("%.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

我们可以使用 --- 轻松格式化为原始小数位 "%.6f" 默认情况下与 "%f" 相同。

"%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 个或更多零则为科学)

原文由 Puddle 发布,翻译遵循 CC BY-SA 4.0 许可协议

我很确定你可以这样做:

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

原文由 m0dem 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏