带有 str.format() 的有限数字,然后仅在它们重要的时候



如果我们打印美元金额,我们通常希望始终显示两个十进制数字。

cost1, cost2 = 123.456890123456789, 357.000
print '{c1:.2f}  {c2:.2f}'.format(c1=cost1, c2=cost2)

显示

123.46  357.00

但在其他情况下,我们只想在分数很重要时才打印它们。例如,如果上面的两个数字是音量,我们可能更喜欢显示

123.45 gal. 357 gal.

这可以直接用format获得吗?

在字符串格式化操作中,Python 文档描述了截断尾随零的%g格式。

>>> print "%g gallons" % (123.45)
123.45 gallons
>>> print "%g gallons" % (357)
357 gallons
>>> print "%g gallons" % (357.0)
357 gallons

或者使用 Python 3 字符串格式:

>>> print "{:g} gal {:g} gal".format(123.45, 357.0)
123.45 gal 357 gal

g格式化程序不直观,但您可以通过设置精度获得一些有趣的结果:

>>> print "{:g} gal {:.3g} gal {:.4g} gal {:.5g} gal {:.6g} gal {:.7g} gal".format(*([123.456789] * 6))
123.457 gal 123 gal 123.5 gal 123.46 gal 123.457 gal 123.4568 gal

请注意,在这种情况下,将精度设置为 .5 可实现所需的 2 位小数结果。

当然,您可以先将其与浮点格式化程序结合使用f以获得您想要的任何内容。

最新更新