整数除法与商数相比:为什么这个令人惊讶的结果呢?

时间:2010-01-07 10:33:25

标签: python python-3.x python-2.x integer-division floor

Python的//“整数除法”运算符让我感到惊讶,今天:

>>> math.floor(11/1.1)
10.0
>>> 11//1.1
9.0

documentation读取“x和y”的“(浮动)商”。那么,为什么math.floor(11 / 1.1)等于10,但是11 // 1.1等于9?

1 个答案:

答案 0 :(得分:6)

因为1.1不能以二进制形式准确表示;近似值小于1.1 - 因此除法结果有点太小。

尝试以下方法:

在Python 2下,在控制台输入:

>>> 1.1
1.1000000000000001

在Python 3.1中,控制台将显示1.1,但在内部,它仍然是相同的数字。

可是:

>>> 11/1.1
10.0

正如gnibbler指出的那样,这是浮点数可用精度限制内“内部舍入”的结果。正如MYYN在评论中指出的那样,//使用不同的算法来计算分层结果而不是math.floor(),以便尽可能保留a == (a//b)*b + a%b

如果您需要此精确度,请使用Decimal类型。