Те, що ви повинні врахувати, це те, що //це floorоператор, і, як такий, вам слід спочатку подумати, ніби ви маєте рівну ймовірність впасти в 100, як у 99 (*) (тому що операція буде мати 100 ± epsilonза epsilon>0умови, що шанси отримати рівно 100,00 ..0 надзвичайно низькі.)
Ви насправді можете бачити те саме зі знаком мінус,
>>> 1//.01
99.0
>>> -1//.01
-100.0
і ви повинні бути настільки ж (не) здивовані.
З іншого боку, int(-1/.01)виконує спочатку ділення, а потім застосовує число int()в номері, яке не є підлогою, а відсіканням до 0 ! що означає, що в такому випадку,
>>> 1/.01
100.0
>>> -1/.01
-100.0
отже,
>>> int(1/.01)
100
>>> int(-1/.01)
-100
Округлення, однак, дасть вам ВАШ очікуваний результат для цього оператора, оскільки, знову ж таки, помилка мала для цих цифр.
(*) Я не кажу, що ймовірність однакова, я просто кажу, що апріорі, коли ви виконуєте таке обчислення з плаваючою арифметикою, це оцінка того, що ви отримуєте.