Изменилась ли встроенная функция round() в Python между 2.4 и 2.7?
Питон 2.4:
Python 2.4.6 (#1, Feb 12 2009, 14:52:44)
[GCC 3.4.6 20060404 (Red Hat 3.4.6-8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> f = 1480.39499999999998181010596454143524169921875
>>> round(f,2)
1480.4000000000001
>>>
Питон 2.7:
Python 2.7.1 (r271:86832, May 13 2011, 08:14:41)
[GCC 3.4.6 20060404 (Red Hat 3.4.6-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> f = 1480.39499999999998181010596454143524169921875
>>> round(f, 2)
1480.39
>>>
Есть ли способ вернуть поведение Python 2.4?
Я знаю, что правильный ответ, конечно, использовать модуль десятичной арифметики. К сожалению, это, вероятно, не вариант на данный момент, учитывая ограничения по времени.
Обновить
Для контекста я сравниваю значения в двух системах, одна из которых использует десятичное представление, а другая - с плавающей запятой. Это может (или не может) быть законным различием между системами, которое необходимо проверить в дальнейшем, поэтому я буду консультироваться с пользователями и разбираться с этим на уровне «отчетности», а не в момент получения данных из систем. .
Спасибо за вашу помощь!
round
. - person Mark Ransom   schedule 21.12.2011Unfortunately, this [decimal module] probably isn't an option at this point given time limitations.
Я сомневаюсь, что это действительно так, по крайней мере, вы не должны ожидать, что число с плавающей запятой даст точный результат или точное округление, поскольку число с плавающей запятой по определению является неточным. Избавьте себя от хлопот и преобразуйте свою программу в десятичную. - person Lie Ryan   schedule 21.12.20111480.395
. - person dan04   schedule 21.12.20111480.395
. Это не отменяет моего предположения о том, что разница вызвана изменением обработки ввода, хотя другие свидетельства указывают на другое. - person Mark Ransom   schedule 21.12.2011repr
и исправилиround
(исправление здесь означает относительно спецификации IEEE с плавающей запятой). - person John Y   schedule 21.12.2011