Я читал о делении и целочисленном делении в Python и различиях между делениями в Python2 и Python3. По большей части все имеет смысл. Python 2 использует целочисленное деление только тогда, когда оба значения являются целыми числами. Python 3 всегда выполняет истинное деление. Python 2.2+ ввел оператор //
для целочисленного деления.
Примеры других программистов предложили работу хорошо и аккуратно, например:
>>> 1.0 // 2.0 # floors result, returns float
0.0
>>> -1 // 2 # negatives are still floored
-1
Как реализовано //
? Почему происходит следующее:
>>> import math
>>> x = 0.5
>>> y = 0.1
>>> x / y
5.0
>>> math.floor(x/y)
5.0
>>> x // y
4.0
Не стоит x // y = math.floor(x/y)
? Эти результаты были получены на python2.7, но поскольку x и y оба являются float, результаты должны быть одинаковыми на python3+. Если есть ошибка с плавающей запятой, где x/y
на самом деле 4.999999999999999
и math.floor(4.999999999999999) == 4.0
не будет отображаться в x/y
?
Однако следующие аналогичные случаи не затрагиваются:
>>> (.5*10) // (.1*10)
5.0
>>> .1 // .1
1.0