这个格式化代码是如何工作的?

0 投票
2 回答
4133 浏览
提问于 2025-04-15 17:42

我总是想知道为什么,而不仅仅是怎么做,所以我来解释一下:

这个是怎么回事:

'{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在小数点前,而不是用0,还是说这是语法规定?

2 个回答

2

你需要考虑所有字符的宽度,包括小数点和小数部分。如果你想要显示05.55,这总共有5个字符,所以:

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

这是因为0字符启用了零填充,但你设置的宽度是1。把宽度设置为2(像 '{0:02.1f}' 这样),你就会看到前面有个0。

编辑 - 其实,我不确定2是否足够,因为我不知道在小数点后面有更多数字时会怎样。所以为了保险起见,可以设置成5,看看效果如何。

编辑2 - 好吧,我刚试了一下。宽度是指总宽度,包括所有数字和小数点。所以你会得到这个:

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

注意,现在字符串的总长度是5,前面有个0,因为启用了零填充,而且由于 .2 的原因,小数点后面只保留了2位数字。

撰写回答