求知关于format输出时用浮点数进行宽度设置时出现的两种不同情况的原因

手册提到了format里的“width 是一个定义最小总字段宽度的十进制整数”
但如果我们用浮点数呢?试了试也可以。但会出现两种不同的情况,6、7行的代码运行与1行代码运行无异。但3、4行输出结果中的@怎么就不见了。
所以出现这种差别的原因是什么呢?

 

print("{0:=^5}".format('@'))#正常情况
 
print("{0:=^5.0}".format('@'))#浮点数后全是0的情况
print("{0:=^5.00}".format('@'))
 
print("{0:=^5.01}".format('@'))#浮点数后不全是0的情况
print("{0:=^5.1}".format('@'))
输出结果:
==@==
=====
=====
==@==
==@==

 

width 如果用浮点数,其中整数部分是输出数据所占据的宽度,不足则用指定字符补齐。

而小数部分是从数据中裁取的长度。对于数值型数据是裁取指定精度的位数,

对于字符串型数据是裁取字符串前指定个数的字符。

5.0就是裁取字符串前0个字符,自然就是空字符串“”,什么也不输出了

 

print("{0:=^5.2}".format("abc"))#取字符串前2位“ab”

print("{0:=^5.1}".format("abc"))#取字符串前1位“a”

print("{0:=^5.0}".format("abc"))#取字符串前0位“”

 

这个格式化字符串的语句里的浮点数并不是数学里的概念。

你这里的“浮点数”要拆成两个部分来看:整数部分是你所说的 width 即宽度,不足则不齐;小数部分是precision即精度,超过这个长度则会被舍掉。

你代码里 .0 就是精度为 0,相当于不给字符串任何生存的空间,自然就不显示了。