Поведение функции «round» в Python

Может ли кто-нибудь объяснить мне этот код кода:

>>> round(0.45, 1) 0.5 >>> round(1.45, 1) 1.4 >>> round(2.45, 1) 2.5 >>> round(3.45, 1) 3.5 >>> round(4.45, 1) 4.5 >>> round(5.45, 1) 5.5 >>> round(6.45, 1) 6.5 >>> round(7.45, 1) 7.5 >>> round(8.45, 1) 8.4 >>> round(9.45, 1) 9.4 

обновленный

Я думаю, это из-за плавающего представления. Я прав?

2 Solutions collect form web for “Поведение функции «round» в Python”

Ты прав. Ни одно из чисел не может быть представлено точно. В некоторых случаях дробная часть строго больше 0.45 а в некоторых она строго меньше:

 In [4]: ['%.20f' % val for val in (0.45, 1.45, 2.45, 3.45, 4.45, 5.45, 6.45, 7.45, 8.45, 9.45)] Out[4]: ['0.45000000000000001110', '1.44999999999999995559', '2.45000000000000017764', '3.45000000000000017764', '4.45000000000000017764', '5.45000000000000017764', '6.45000000000000017764', '7.45000000000000017764', '8.44999999999999928946', '9.44999999999999928946'] 

Это объясняет, казалось бы, непоследовательное округление.

поскольку NPE говорит, что двоичное представление десятичного числа не является точным, поэтому вы можете получить странное поведение от округления, модуль, который решает эту проблему, десятичен. Вот официальная документация

  • Python3: Почему работает __spec__?
  • Как избежать непоследовательного поведения s , когда j иногда 0?
  • aysncio не может читать stdin в Windows
  • Generic: команда python в vim?
  • networkx - изменить цвет / ширину в соответствии с атрибутами края - непоследовательный результат
  • Почему Python 3 exec () терпит неудачу при указании локальных пользователей?
  • Проверка наличия NaN в контейнере
  • pip не видит setuptools
  • Python - лучший язык программирования в мире.