Python浮点数比较

Zhi*_*iya 13 python floating-point

我只是回顾一些Python的基础知识,并且在比较浮点数方面存在一个棘手的问题.

2.2 * 3.0 == 6.6
3.3 * 2.0 == 6.6
Run Code Online (Sandbox Code Playgroud)

我以为这些都应该返回False.然而,第二个给了我一个真实. 在此输入图像描述

请帮帮我.谢谢!

Ama*_*dan 13

这可能很有启发性:

>>> float.hex(2.2 * 3.0)
'0x1.a666666666667p+2'
>>> float.hex(3.3 * 2.0)
'0x1.a666666666666p+2'
>>> float.hex(6.6)
'0x1.a666666666666p+2'
Run Code Online (Sandbox Code Playgroud)

虽然它们都以十进制显示6.6,但是当您检查内部表示时,其中两个以相同的方式表示,而其中一个不是.

  • 但它们_不是_都以十进制显示为“6.6”。在 3.x 中,`print(2.2 * 3.0)` 或只是 `2.2 * 3.0` 将显示 `6.6000000000000005`。在 2.x 中,`print` 会被截断,但只有 `2.2 * 3.0` 仍会显示 `6.6000000000000005`。所以,这比答案暗示的更容易理解。 (2认同)