如何让Python格式化浮点数为特定有效数字?

45 投票
3 回答
72329 浏览
提问于 2025-04-21 01:05

我想让我的Python(2.4.3)输出的数字有特定的格式。具体来说,如果这个数字是一个有限小数并且有效数字不超过6位,就全部显示出来。如果有效数字超过6位,那就只显示6位有效数字。

示例"A"展示了Python是怎么输出浮点数的,而示例"B"则展示了我希望它们的输出格式。我该如何让Python按照我想要的方式格式化我的数字呢?

A:
10188469102.605597
5.5657188485
3.539
22.1522612479
0
15.9638450858
0.284024
7.58096703786
24.3469152383

B:
1.01885e+10
5.56572
3.539
22.1523
0
15.9638
0.284024
7.58097
24.3469

3 个回答

4

试试这个方法

a=[10188469102.605597,5.5657188485,3.539,22.1522612479,0,15.9638450858,0.284024,7.58096703786,24.3469152383]

 for i in a:
    if i >100:
        print '{:.6e}'.format(i)
    else:
        print '{:.6f}'.format(i)

适用于较低版本的Python

for i in a:
    if i >100:
        print '%6e'%i
    else:
        print '%6f'%i

输出结果

1.018847e+10
5.565719
3.539000
22.152261
0.000000
15.963845
0.284024
7.580967
24.346915
17

有一种方法可以保留尾随零,这样就能始终显示出有效数字的数量。虽然这不完全是提问者想要的,但对很多人来说可能会很有用。

a = [10188469102.605597,5.5657188485,3.539,22.1522612479,0,15.9638450858,0.284024,7.58096703786,24.3469152383]

for i in a:
    print("{:#.6g}".format(i))

输出

1.01885e+10
5.56572
3.53900
22.1523
0.00000
15.9638
0.284024
7.58097
24.3469

请注意,这种方法只适用于format函数,而不适用于%运算符。

根据文档

'#'选项会让转换使用“备用形式”。不同类型的备用形式定义是不同的。这个选项只对整数、浮点数、复数和Decimal类型有效。

'g':通用格式……无效的尾随零会从有效数字中去掉,如果后面没有其他数字,十进制点也会被去掉,除非使用了#选项。

71

你需要使用 g 这个修饰符来格式化数字,这样可以去掉不重要的零。

>>> "{0:.6g}".format(5.5657188485)
'5.56572'
>>> "{0:.6g}".format(3.539)
'3.539'

抱歉,我的更新还提到我只能使用 Python 2.4.3,这个版本没有 format() 这个函数。

即使没有 .format() 这个函数,格式说明符依然可以使用:

>>> for i in a:
...    print '%.6g' % (i,)
...
1.01885e+10
5.56572
3.539
22.1523
0
15.9638
0.284024
7.58097
24.3469

撰写回答