我如何在Python2中面向未来的'round`函数?

时间:2018-01-20 18:52:09

标签: python python-2.7 future-proof

从未来导入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 个答案:

答案 0 :(得分:2)

我打算建议你的自定义功能想法,这样你就可以确保它总是做你想要的,但这似乎是一个特殊的(奇怪的)情况,如果我使用{{ 1}}我得到

Python 3.6:

future.builtin.round()

和Python 2.7:

>>> round(4781, -2)
4800

似乎只是某个被打破的>>> round(4781, -2) 4800.0 ;在这种情况下,您应该避免使用future.builtins函数。请注意,py3 future.builtins.round()返回一个整数,而py2 round()返回一个浮点数,但这似乎是两个库存实现之间的唯一区别(对于简单的舍入操作,例如给出的示例)。