Skip to content

Commit

Permalink
PythonCharmers#322 Add support for negative ndigits in round; additio…
Browse files Browse the repository at this point in the history
…nally, fixing a bug so that it handles passing in Decimal properly
  • Loading branch information
kayneb committed Dec 19, 2019
1 parent 01a1d31 commit a4911b9
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 8 deletions.
17 changes: 10 additions & 7 deletions src/future/builtins/newround.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
``python-future``: pure Python implementation of Python 3 round().
"""

from __future__ import division
from future.utils import PYPY, PY26, bind_method

# Use the decimal module for simplicity of implementation (and
Expand Down Expand Up @@ -29,8 +30,6 @@ def newround(number, ndigits=None):
if hasattr(number, '__round__'):
return number.__round__(ndigits)

if ndigits < 0:
raise NotImplementedError('negative ndigits not supported yet')
exponent = Decimal('10') ** (-ndigits)

if PYPY:
Expand All @@ -42,15 +41,19 @@ def newround(number, ndigits=None):
d = number
else:
if not PY26:
d = Decimal.from_float(number).quantize(exponent,
rounding=ROUND_HALF_EVEN)
d = Decimal.from_float(number)
else:
d = from_float_26(number).quantize(exponent, rounding=ROUND_HALF_EVEN)
d = from_float_26(number)

if ndigits < 0:
result = newround(d / exponent) * exponent
else:
result = d.quantize(exponent, rounding=ROUND_HALF_EVEN)

if return_int:
return int(d)
return int(result)
else:
return float(d)
return float(result)


### From Python 2.7's decimal.py. Only needed to support Py2.6:
Expand Down
1 change: 0 additions & 1 deletion tests/test_future/test_builtins.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,6 @@ def test_round(self):
self.assertTrue(isinstance(round(123.5, 0), float))
self.assertTrue(isinstance(round(123.5), Integral))

@unittest.skip('negative ndigits not implemented yet')
def test_round_negative_ndigits(self):
self.assertEqual(round(10.1350, 0), 10.0)
self.assertEqual(round(10.1350, -1), 10.0)
Expand Down

0 comments on commit a4911b9

Please sign in to comment.