Python浮点精度,小数点后没有整数精度

Ter*_*aft 6 python floating-point

在使用float精度时,我偶然发现了一个奇怪的事实.为什么python在格式化时只打印整数部分"%.f".我很想知道这背后的机制

 >>> a = float(2.12345)
 >>> a
 2.12345
 >>> print "%.2f" % a
 2.12
 >>> print "%.1f" % a
 2.1
 >>> print "%f" % a
 2.123450
 >>> print "%.f" % a
 2                   #why?
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的解释:)

eca*_*mur 4

自从%1993 年添加格式以来,情况一直如此;如果 a.后面没有十进制数,则精度为零

这没有记录,但与 一致printf,Python%格式的灵感来自于:

(可选).后跟整数 或*,或两者都不指定转换精度。在使用 when 的情况下*,精度由 int 类型的附加参数指定。如果该参数的值为负数,则会被忽略。如果既没有使用数字也没有*使用,则精度为零。

有趣的是,另一个未记录的功能也受到启发printf,您可以将其用作*精度,如上所述:

>>> "%6.*f" % (2, 1.234)
'  1.23'
Run Code Online (Sandbox Code Playgroud)

  • @HiteshPaul `string.format` 是后来的 API(在 PEP 3101 中引入),因此可以使其严格符合规范;在不破坏向后兼容性的情况下,无法删除“%”的未记录行为。 (2认同)