Числа с плавающей запятой не могут точно представлять большинство десятичных чисел, поэтому при вводе литерала с плавающей запятой вы фактически получаете приближение этого литерала. Аппроксимация может быть больше или меньше, чем введенное число.
Вы можете увидеть точное значение числа с плавающей запятой, приведя его к десятичному или дробному числу.
>>> from decimal import Decimal
>>> Decimal(0.01)
Decimal('0.01000000000000000020816681711721685132943093776702880859375')
>>> from fractions import Fractio
>>> Fraction(0.01)
Fraction(5764607523034235, 576460752303423488)
Мы можем использовать тип Fraction, чтобы найти ошибку, вызванную нашим неточным литералом.
>>> float((Fraction(1)/Fraction(0.01)) - 100)
-2.0816681711721685e-15
Мы также можем узнать, как гранулированные числа с плавающей запятой двойной точности около 100, используя nextafter от numpy.
>>> from numpy import nextafter
>>> nextafter(100,0)-100
-1.4210854715202004e-14
Исходя из этого, мы можем предположить, что ближайшее число с плавающей запятой 1/0.01000000000000000020816681711721685132943093776702880859375фактически равно 100.
Разница между 1//0.01и int(1/0.01)заключается в округлении. 1 // 0.01 округляет точный результат до следующего целого числа за один шаг. Таким образом, мы получаем результат 99.
int (1 / 0.01), с другой стороны, округляет в два этапа, сначала округляет результат до ближайшего числа с плавающей запятой двойной точности (которое точно равно 100), затем округляет это число с плавающей запятой до следующего целого числа (которое является опять ровно 100).