防止 python3 中数字的自动科学形式

Preventing auto scientific form for numbers in python3

是否可以在计算时不分配scientific/standard表格编号?

例如,现在我的代码中的一行有: 数字 = 10**23 * 1.1

应该评估为 110000000000......0 或其他什么,而不是我分配 1.1e+23 这非常烦人,因为我试图将 IEEE754 转换为十进制并打印出特定的东西但它不会由于 1.1e+23

的科学计数法而工作

我试过环顾四周,但没有简单简洁的答案

默认情况下您无法更改此设置。如果指数大于浮点数的精度,则显示浮点数时的默认行为始终移动到科学记数法。

改变它的唯一方法是明确以另一种方式格式化它。如果您知道显示数字的精度,可以使用 format:

>>> number
1.1e+23
>>> format(number, 'f')
'110000000000000004194304.000000'
>>> format(number, '.0f')
'110000000000000004194304'

您也可以将其与格式字符串一起使用:

>>> 'The number is {:.0f}'.format(number)
'The number is 110000000000000004194304'

如果您的目标是将浮点数转换为整数,那么您应该这样做。整数具有无限精度,因此不使用科学记数法显示。例如,您可以 round 或截去小数点后的数字:

>>> round(number)
110000000000000004194304
>>> int(number)
110000000000000004194304

对于高精度小数,可以使用Decimal类型。它允许小数具有任意精度:

>>> from decimal import Decimal
>>> d = 10**23 * Decimal('1.1')
>>> d
Decimal('110000000000000000000000.0')
>>> int(d)
110000000000000000000000
def number(n):
    """
    如果小于1,只保留4位有效数字
    如果大于1,保留小数点后2位
    """
    if n < 1:
        n = '{:.4g}'.format(n)
    else:
        n = '{:.2f}'.format(n)

    if 'e-' in n:
        a, b = n.split('e-')
        a = a.replace('.', '')
        b = int(b)
        return '0.' + '0' * (b - 1) + a
    else:
        return n

上面的例子,如果小于1,我保留4位有效数字,如果大于1,我保留小数点前所有数字,小数点后保留2位。它非常适合显示加密货币的价格 ;)

In [61]: number(0.00000123456)                                                  
Out[61]: '0.000001235'

In [62]: number(47740.3413)                                                     
Out[62]: '47740.34'