当我想打印浮点数时,我对格式化字符串感到有些困惑。例如,当我有%6.2f
时,我希望打印功能给我一个6位数字的数字,其中小数部分为2位数字。因此,当我编写以下语句时:
mRa = 569.34643865
print("result %6.2f" %mRa)
结果将为result 569.35
。
但是,当我将代码的第二行更改为print("result %1.0f" %mRa)
时,结果为result 569
,而我希望只看到数字的第一位。另外,如果我将代码的该行更改为print("result %3.0f" %mRa)
,结果将完全相同。如果有人可以向我解释为什么我们会有这样的(矛盾的)观察结果,我将不胜感激。
答案 0 :(得分:4)
对于每个the documentation,1
中的%1.0f
是最小字段宽度(在“ printf样式的字符串格式设置”部分中,清单)。这是用于该字段的最少字符数。
最小字段宽度旨在帮助程序格式化表格-正确计算所需最大空间的程序可以将其用作字段宽度,并且具有不同值的行在连续打印时将显示对齐。但是,如果值超过最小字段宽度,则将显示正确的值(通过使用更多字符,将使表对齐混乱)。如果程序没有足够的字段宽度,通常最好使显示混乱而不是错误显示,因此该字段将使用更多字符,而不是剪切数字。
要剪辑字段以使其仅显示某些数字,您必须自己操作字符串。
在右边的剪切数字被认为是可以接受的,因为这种剪切的结果会少量改变显示的值。 (尽管如此,结果导致的不正确的数字显示使一代又一代的程序员对浮点算术的工作方式感到困惑。)因此,精度字段(2
中的%6.2f
)指定了用于精度的位数,而不是要使用的最小位数。