9

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

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

文档显示为“x 和 y 的(下限)商”。那么,为什么 math.floor(11/1.1) 等于 10,而 11//1.1 等于 9?

4

1 回答 1

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如果需要此精度,请使用类型。

于 2010-01-07T10:36:04.763 回答