这个格式化代码是如何工作的?
我总是想知道为什么,而不仅仅是怎么做,所以我来解释一下:
这个是怎么回事:
'{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位数字。