Как можно в будущем использовать функцию `round` в Python2?
Когда round
импортируется из будущего, он не ведет себя так же, как Python3 round
функция. В частности, он не поддерживает округление отрицательной цифры.
В Python3:
>>> round(4781, -2)
4800
В Python2:
>>> from builtins import round
>>> round(4781, -2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/future/builtins/newround.py", line 33, in newround
raise NotImplementedError('negative ndigits not supported yet')
NotImplementedError: negative ndigits not supported yet
Возможные решения включают обработку ошибок для отрицательного округления, написание собственного round
функция и т. д. Как с этим обращаться? (Неявно, я прошу о лучших практиках, большинство Pythonic, принятых сообществом, и т. Д.)
1 ответ
Я собирался предложить вашу идею пользовательской функции, чтобы вы могли убедиться, что она всегда делает то, что вы хотите, но это, кажется, особый (странный) случай, когда я не использую future.builtin.round()
я получил
Python 3.6:
>>> round(4781, -2)
4800
и Python 2.7:
>>> round(4781, -2)
4800.0
Кажется, это просто future.builtins
что-то сломано; в этом случае вам следует избегать использования future.builtins.round()
функция. Обратите внимание, что py3 round()
возвращает целое число, а py2 round()
возвращает число с плавающей запятой, но, похоже, это единственное различие между двумя реализациями акций (для простых операций округления, таких как приведенные примеры).