在Python中如何取整浮点数?

45

我希望能够在百分数值前面填充一些数字,以便小数点前始终有3个单位。 对于整数,我可以使用“%03d”- 是否有相应的浮点数?

“%.3f”适用于小数点后,但“%03f”没有效果。

4个回答

55

'%03.1f' 的格式是正确的(其中1可以是任何数字,或者为空字符串):

>>> "%06.2f"%3.3
'003.30'

>>> "%04.f"%3.2
'0003'
请注意,字段宽度包括小数和分数位。

3
如果值为负数,前导的 '-' 会消耗掉一个字段宽度计数 - "%06.2f" % -3.3 会得到 "-03.30",因此如果即使是负数也必须有3个数字,您将不得不将字段宽度再增加1。您可以使用 '' 字段宽度值来实现这一点,并传递一个计算出的值:value = -3.3; print "%0.2f" % (6+(value<0),value) - PaulMcG
1
这是 @PaulMcGuire 的意思,但使用 formatvalue = -3.3; print "{t:0{format}.2f}".format(format=6+(value<0), t=value) - Adobe

28

或者,如果你想使用.format

              {:6.1f}
                ↑ ↑ 
                | |
# digits to pad | | # of decimal places to display

复制粘贴:{:6.1f}

上述的数字6包括小数点左侧的数字、小数点和小数点右侧的数字。

使用示例:

'{:6.2f}'.format(4.3)
Out[1]: '  4.30'

f'{4.3:06.2f}'
Out[2]: '004.30'

'{:06.2f}'.format(4.3)
Out[3]: '004.30'

7
注意,这里指的是需要填充的总数字,包括小数点右侧的数字。不仅仅是小数点左侧的数字。我花了太长时间才弄清楚为什么它没有起作用。 - endolith

10
你可以使用 str.zfill 方法:
str(3.3).zfill(5)
'003.3'

3

一个简短的例子:

var3= 123.45678
print(
    f'rounded1    \t {var3:.1f} \n' 
    f'rounded2    \t {var3:.2f} \n' 
    f'zero_pad1   \t {var3:06.1f} \n'  #<-- important line
    f'zero_pad2   \t {var3:07.1f}\n'   #<-- important line
    f'scientific1 \t {var3:.1e}\n'
    f'scientific2 \t {var3:.2e}\n'
)

提供输出。
rounded1         123.5 
rounded2         123.46 
zero_pad1        0123.5 
zero_pad2        00123.5
scientific1      1.2e+02
scientific2      1.23e+02

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接