【问题标题】:decimal digits in python with e+带有e +的python中的十进制数字
【发布时间】:2023-12-28 01:33:02
【问题描述】:

我想在 Python 中进行打印输出,每次输出 2 位数字。问题是,有非常大(或小)的数字,所以正常的 Python 输出是这样的:

5.89630388655e-09
8.93552349994e+14

但有时也有正常的数字,例如:

345.8976

我只是想强制它有两个数字,这意味着大数字和小数字的输出是

5.89e-09
8.93e+14

而普通数字只是在第二个数字处加盖(或四舍五入):

345.89 (or 345.90)

这怎么可能在 Python 中实现?

【问题讨论】:

    标签: python rounding digits


    【解决方案1】:

    在 python 中,您可以像其他语言一样格式化数字:

    print '%.2f' % number
    print '%.3g' % number
    

    有关可用标志和转换的更多详细信息,请参阅string formatting

    或者,您可以使用str.format()Formatter

    '{0:.2f}'.format(number)
    '{0:.3g}'.format(number)
    

    有关格式表达式语法的详细信息,请参阅format string syntax

    f 转换生成的符号始终包含小数点,并且可能导致大数字的字符串表示非常长,而非常小的数字则为 0.00。

    g 转换根据数字的大小生成带有或不带有指数的符号。但是,gf 转换对精度参数的解释不同。对于f,它是小数点后的位数,而对于g,它是显示的所有有效数字的位数。详情请见string formatting

    对精度参数有不同解释的原因是,在处理数量级非常不同的数字时,坚持固定数量的有效位数更有意义。

    如果您决定不遵循此处的约定,则需要编写代码,对不同大小的数字使用不同的格式表达式。但是请注意,这将导致您的代码根据其大小生成具有不同精度的数字,例如345.89 有五个有效数字,而 3.46e+10 和 3.46e-10 只有三个。

    【讨论】:

    • 这不起作用,因为 5.89630388655e-09 刚刚变成 0.00。我需要一个选项,例如,在 e-09 时上限为两位数。
    • 好的,谢谢。因为我得到了这些不同的数字,所以我必须比较它们,即使它们的大小不同。所以没有“简单的方法”,我必须实现一个代码。
    • 如果您需要手动检查和比较数字,最好的转换实际上不是上述任何一种,而是e,例如'%.2e'。这将为所有数字显示相同数量的有效数字,并始终显示指数,从而使检查和比较更加自然。
    【解决方案2】:

    您可以使用格式命令:

    "({0:.2f})".format(yournumber)
    

    '.2f' 表示两位小数

    【讨论】:

    • 如果我这样做,我会得到 5.89630388655e-09: (0.00) 而不是 5.89e-09。
    • @dalvo 它可以给你一个小写的'e',如果你替换:"({0:.2e})".format(yournumber)
    最近更新 更多