【问题标题】:Convert scientific notation to decimals将科学记数法转换为小数
【发布时间】:2015-07-03 04:09:37
【问题描述】:

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

8.99284722486562e-02 

但我想将它们转换为:

0.08992847

有没有内置函数或者其他方法可以实现?

【问题讨论】:

  • 您是否考虑过单独搜索:1.如何将字符串转换为数字; 2.如何将数字转换为字符串?这并不难。

标签: python string numbers


【解决方案1】:

我做出这个回答是因为投票最多的人有错误信息,所以我可以解释我的改进。

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

【讨论】:

    【解决方案2】:

    我很确定你可以这样做:

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

    【讨论】:

    • @MalikBrahimi:你到底是什么意思?
    • 答案应该上升到七,你的答案超过了那个点。
    • @M0dem 只需添加print("%.8f" %s) 或print("{0:.8f}".format(s))
    • 试试:float('{:.8f}'.format(float("8.99284722486562e-02"))).
    • [代码拼写错误] "{:.8f}.format 应该是 "{:.8f}".format 缺少双引号
    【解决方案3】:

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

    >>> (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')
    

    【讨论】:

    • 我正在寻找这个话题并看到了这个答案,你有没有解释为什么第一个语句会出现错误?
    • @AhmedAlhallag 请参见此处:docs.python.org/3/tutorial/floatingpoint.html“同样,无论您愿意使用多少个以 2 为底的数字,十进制值 0.1 都不能精确地表示为以 2 为底的小数。在底数 2 中,1/10 是无限重复的分数"
    【解决方案4】:

    科学记数法可以用float转换成浮点数。

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

    float 可以用format 进行四舍五入,然后float 可以在字符串上使用以返回最终的舍入浮点数。

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

    【讨论】:

      猜你喜欢
      • 2017-11-27
      • 2014-09-25
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      • 1970-01-01
      • 2022-10-06
      • 1970-01-01
      相关资源
      最近更新 更多