为什么5可被0.5整除而不是0.1?

时间:2015-08-13 09:48:00

标签: python module floating-point

我不明白为什么%的工作原理如下:

>>> 5 % 0.5 == 0
True
>>> 5 % 0.25 == 0
True
>>> 5 % 0.2 == 0
False
>>> 5 % 0.1 == 0
False

有人可以向我解释一下吗? 我需要检查用户输入是否划分了一系列数字。只有当所有数字都可以被用户输入整除时,程序才接受输入,否则它会询问用户另一个数字。

2 个答案:

答案 0 :(得分:5)

请注意:

  • 0.52**-1
  • 0.252**-2
  • 0.6252**-1 + 2**-3 等等。

因此,只要你有一个完全可表示的浮点数,分割/模运算很有可能顺利进行。

但是,当您尝试将(或取模)除以0.1或0.2时,其浮点表示中始终存在舍入误差,这意味着除法将不完整,因此结果将不为True。

您可以使用Decimal module进行更正确的操作。另外,请浏览常规pitfalls of floating point number

>>> 1000 % 0.25 == 0
True
>>> 1000 % 0.625 == 0
True

答案 1 :(得分:1)

浮点运算中的舍入误差。

>>>5 % 0.5
0.0
>>>5 % 0.25
0.0
>>>5 % 0.2
0.19999999999999973
>>>5 % 0.1
0.09999999999999973