小数字进行整数除法会返回错误答案

5

我正在尝试在我的Python脚本中进行一些计算,但结果很奇怪。例如:

0.03 // 0.01
>>> 2.0

如果我将数字升级,我会得到预期的结果:

3.0 // 1.0
>>> 3.0

我非常确信第一个代码片段的答案应该是3.0而不是2.0。有人能解释一下为什么会这样发生以及如何修复吗?


3
即使使用"//",浮点数舍入误差仍会发生。 - user2357112
1
我不确定这是否是一个重复的问题,因为0.03/0.01 < 3.0的结果是False。这个问题似乎涉及到///的语义,而已有的重复问题并没有很好地解释这一点。 - John Coleman
另一方面,第二个重复的目标(自添加以来)确实是一个真正的重复目标。 - John Coleman
2个回答

6
这是由于浮点数误差导致的。请注意,在上述地板除法中,余数不是0
0.03 % 0.01
# 0.009999999999999998

所以如果我们改为除以:

0.03 // 0.009
# 3.0

答案是正确的。因此,0.03不能完全被0.01整除,这是由于浮点数限制导致的余数。

3
正如yatu所提到的那样,这是由于浮点误差造成的。 请尝试使用以下代码:
from decimal import Decimal
Decimal('0.03') // Decimal('0.01')
>>> 3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接