The //
今天,Python 的“整数除”运算符让我感到惊讶:
>>> math.floor(11/1.1)
10.0
>>> 11//1.1
9.0
The 文档读作“x 和 y 的(地板)商”。那么,为什么 math.floor(11/1.1) 等于 10,而 11//1.1 等于 9?
因为1.1不能准确地用二进制形式表示;近似值略高于 1.1 - 因此除法结果有点太小。
请尝试以下操作:
在 Python 2 下,在控制台键入:
>>> 1.1
1.1000000000000001
在Python 3.1中,控制台将显示1.1
,但在内部,它仍然是相同的数字。
But:
>>> 11/1.1
10.0
正如 gnibbler 指出的那样,这是浮点数可用精度限制内“内部舍入”的结果。正如 MYYN 在评论中指出的那样,//
使用不同的算法来计算楼层划分结果math.floor()
为了保存a == (a//b)*b + a%b
尽可能好。
Use the Decimal
如果您需要这种精度,请键入。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)