.2 和 .2f 格式说明符有什么区别?

问题描述

考虑以下片段:

for value in [1.123,1.126,1.12,1.16,1.1,1.0,12345.6789]:
    print(
        f'Testing {value:>12}',f'.2 {value:>17.2}',f'.2g {value:>16.2g}',f'.2f {value:>16.2f}',end='\n\n',sep='\n'
    )

代码显示 {value:.2}{value:.2f} 输出不同的结果。

输出

Testing        1.123
.2               1.1
.2g              1.1
.2f             1.12

Testing        1.126
.2               1.1
.2g              1.1
.2f             1.13

Testing         1.12
.2               1.1
.2g              1.1
.2f             1.12

Testing         1.16
.2               1.2
.2g              1.2
.2f             1.16

Testing          1.1
.2               1.1
.2g              1.1
.2f             1.10

Testing          1.0
.2               1.0
.2g                1
.2f             1.00

Testing   12345.6789
.2           1.2e+04
.2g          1.2e+04
.2f         12345.68

.2f 说明符将数字转换为定点表示法。 我发现 .2.2g 相似但不完全相同。

.2 说明符的预期行为是什么?

解决方法

documentation 说:

类型:无
含义:对于浮点数,这与 与 'g' 相同,只是当使用定点表示法来格式化结果时,它总是小数点后至少一位数字强>。使用的精度与忠实地表示给定值所需的一样大。

我读到的意思是,当没有给出后缀(例如 f)时,样式 g 用于浮点数,除了 1.0:.2 之类的情况将包括 {{1 }}(“至少小数点后一位”),而 .0 不会。

1.0:.2g 的说明包括指定

... 删除无意义的尾随零。