Integer division compared to floored quotient: why this surprising result?

前端 未结 1 1324
余生分开走
余生分开走 2021-01-04 21:35

The // \"integer division\" operator of Python surprised me, today:

>>> math.floor(11/1.1)
10.0
>>> 11//1.1
9.0
相关标签:
1条回答
  • 2021-01-04 21:48

    Because 1.1 can't be represented in binary form exactly; the approximation is a littler higher than 1.1 - therefore the division result is a bit too small.

    Try the following:

    Under Python 2, type at the console:

    >>> 1.1
    1.1000000000000001
    

    In Python 3.1, the console will display 1.1, but internally, it's still the same number.

    But:

    >>> 11/1.1
    10.0
    

    As gnibbler points out, this is the result of "internal rounding" within the available precision limits of floats. And as The MYYN points out in his comment, // uses a different algorithm to calculate the floor division result than math.floor() in order to preserve a == (a//b)*b + a%b as well as possible.

    Use the Decimal type if you need this precision.

    0 讨论(0)
提交回复
热议问题