Целочисленное разделение по сравнению с напольным фактором: почему этот неожиданный результат?

Оператор // «целочисленного деления» 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?

One Solution collect form web for “Целочисленное разделение по сравнению с напольным фактором: почему этот неожиданный результат?”

Поскольку 1.1 не может быть представлен в двоичной форме точно; приближение меньше, чем 1,1, поэтому результат деления слишком мал.

Попробуйте следующее:

В Python 2 введите в консоли:

 >>> 1.1 1.1000000000000001 

В Python 3.1 консоль отобразит 1.1 , но внутри нее все равно останется тот же номер.

Но:

 >>> 11/1.1 10.0 

Как указывает гниблер, это результат «внутреннего округления» в пределах доступных пределов точности поплавков. И, как указывает MYYN в своем комментарии, // использует другой алгоритм для вычисления результата деления пола, чем math.floor() , чтобы сохранить a == (a//b)*b + a%b а также возможное.

Используйте Decimal тип, если вам нужна эта точность.

  • Оператор Modulo в Python
  • Почему print ("text" + str (var1) + "more text" + str (var2)) описывается как "отклонено"?
  • Ошибка установки пакета: невозможно импортировать имя 'unpack_url'
  • Должен ли я использовать объявление кодирования в Python3?
  • Как работает str.startswith?
  • Доступ к элементу dict_keys по индексу в Python3
  • Простая библиотека python для распознавания текста с изображения
  • строка проверки python содержит все символы
  • Python - лучший язык программирования в мире.