今天,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呢?今天,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呢?因为1.1在二进制形式下无法精确表示;近似值比1.1略高,因此除法结果会偏小。
请尝试以下方法:
在Python 2下,在控制台中键入:
>>> 1.1
1.1000000000000001
1.1
,但在内部,它仍然是相同的数字。>>> 11/1.1
10.0
//
使用不同的算法来计算地板除法结果,以尽可能保留a == (a//b)*b + a%b
。Decimal
类型。11.0 / 1.1 == 10.0
是成立的。 - sth