Поведение функции «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
обновленный
- Использование! S vs.: s для форматирования строки в Python
- Как получить текст с текстом «быстрый ответ» в googles?
- Как аннотировать типы множественных возвращаемых значений?
- Ложные новые строки, добавленные в командах управления Django
- Почему __self__ встроенных функций возвращает встроенный модуль, к которому он принадлежит?
Я думаю, это из-за плавающего представления. Я прав?
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 говорит, что двоичное представление десятичного числа не является точным, поэтому вы можете получить странное поведение от округления, модуль, который решает эту проблему, десятичен. Вот официальная документация
- Как сортировать 2 элементарный набор строк в смешанном порядке Используя ключевой параметр (не cmp)
- fastcgi, cherrypy и python