Как можно в будущем использовать функцию `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() возвращает число с плавающей запятой, но, похоже, это единственное различие между двумя реализациями акций (для простых операций округления, таких как приведенные примеры).

Другие вопросы по тегам