截断 f 字符串浮点数而不进行舍入

Mic*_*oni 7 python floating-point decimal f-string

我想打印一个非常非常接近 1 的浮点数,将其截断到小数点后两位而不进行四舍五入,最好使用尽可能少的代码。

a = 0.99999999999
print(f'{a:0.2f}')
Run Code Online (Sandbox Code Playgroud)
Expected: 0.99
Actual: 1.00
Run Code Online (Sandbox Code Playgroud)

Jac*_*ing 1

如果我理解正确的话,我认为你不需要 f 字符串或数学函数。普通的旧字符串操作应该可以让你到达那里:

a = 0.987654321
print(str(a)[:4])
Run Code Online (Sandbox Code Playgroud)

输出:

0.98
Run Code Online (Sandbox Code Playgroud)

  • 0.98999999999999999911182158029987476766109466552734375 是一个在当前常见 Python 实现中失败的示例。该值可以用常用的 IEEE-754 二进制 64 表示,但 Python 的 `str` 可能会为其生成“0.99”,然后问题中的代码错误地显示“0.99”而不是“0.98”。(请注意,与您的断言不执行舍入相反,它实际上进行了舍入,因为在您的示例中传递给它的实际浮点值不是 0.987654321 而是 0.98765432099999994619565768516622483730316162109375。) (3认同)
  • 对于 0.99999999999999988897769753748434595763683319091796875 失败。然后 `str(a)` 产生“1.0”。 (2认同)