这种格式代码如何工作?

时间:2010-01-06 18:03:28

标签: python string

我总是要知道为什么,而不仅仅是如何,所以我走了:

这是如何运作的:

'{0:01.2f}'.format(5.555)  #returns '5.55'

'{0:01.1f}'.format(5.555)  #returns '5.5'

'{0:1.2f}'.format(5.555)   #returns '5.55' again

'{0:1.1f}'.format(5.555)   #returns '5.5' again

当我有额外的零时,为什么这不会通过返回'05 .5'而不仅仅是'5.5'来添加零填充。它似乎没有用。

另外,为什么字符串0:1.1f而不是0:0.1f 等等。这只是一个约定使用小数点前的数字1而不是零,或者是语法?

2 个答案:

答案 0 :(得分:6)

因为0字符可以实现零填充,但宽度为1。将宽度设置为2(如'{0:02.1f}',您将看到前导0。

编辑 - 实际上,我不确定2是否足够,因为我不知道它在小数点后的位数如何表现。因此,为了安全起见,请将其设为5,然后查看它的作用。

编辑2 - 好的,我刚尝试过。宽度对应于TOTAL宽度,包括所有数字和小数点。所以你会得到这个:

>>> '{0:05.2f}'.format(5.555)
'05.55'

请注意,字符串的总长度现在是5,前导0是因为启用了零填充,并且由于.2

,它在小数点后截断为2位数

答案 1 :(得分:2)

您应该指定考虑所有字符的宽度,包括小数和点。如果你想05.55这是5个字符,那么:

>>>'{0:05.2f}'.format(5.555)
'05.55'