以科学计数法显示小数

255 投票
13 回答
496480 浏览
提问于 2025-04-16 22:43

我该怎么把 Decimal('40800000000.00000000000000') 显示成 '4.08E+10' 呢?

我试过这个:

>>> '%E' % Decimal('40800000000.00000000000000')
'4.080000E+10'

但是结果多了那些多余的0。

13 个回答

73

给定你的数字

x = Decimal('40800000000.00000000000000')

从Python 3开始,

'{:.2e}'.format(x)

这是推荐的做法。

e表示你想要科学计数法,.2表示你希望小数点后保留2位数字。所以你会得到 x.xxE±n 这样的格式。

185

这里有一个使用 format() 函数的例子:

>>> "{:.2E}".format(Decimal('40800000000.00000000000000'))
'4.08E+10'

除了使用 format,你还可以用 f-字符串

>>> f"{Decimal('40800000000.00000000000000'):.2E}"
'4.08E+10'
229
from decimal import Decimal

'%.2E' % Decimal('40800000000.00000000000000')

# returns '4.08E+10'

在你的这个数字 '40800000000.00000000000000' 中,有很多后面的零,它们和其他数字一样都是很重要的。这就是为什么你需要明确告诉系统你想在哪里停止的原因。

如果你想自动去掉所有多余的零,可以试试:

def format_e(n):
    a = '%E' % n
    return a.split('E')[0].rstrip('0').rstrip('.') + 'E' + a.split('E')[1]

format_e(Decimal('40800000000.00000000000000'))
# '4.08E+10'

format_e(Decimal('40000000000.00000000000000'))
# '4E+10'

format_e(Decimal('40812300000.00000000000000'))
# '4.08123E+10'

撰写回答