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?
答案 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
类型。