整数除法与底商相比:为什么会有这种令人惊讶的结果?

发布于 2021-01-29 16:06:39

//今天,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?

关注者
0
被浏览
226
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看