diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index 6671f2c02eb..19ce9ec83d3 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -1224,6 +1224,9 @@ class BuiltinTest(unittest.TestCase): self.assertEqual(round(-5.5), -6) self.assertEqual(round(-6.5), -7) + # Issue #1869: integral floats should remain unchanged + self.assertEqual(round(5e15+1), 5e15+1) + # Check behavior on ints self.assertEqual(round(0), 0) self.assertEqual(round(8), 8) diff --git a/Misc/NEWS b/Misc/NEWS index f226eb1a39e..58197de0490 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,9 @@ What's New in Python 2.7 alpha 1 Core and Builtins ----------------- +- Issue #1869: fix a couple of minor round() issues. round(5e15+1) + was giving 5e15+2; round(-0.0) was losing the sign of the zero. + - Issue #5759: float() didn't call __float__ on str subclasses. - Issue #5704: the "-3" command-line option now implies "-t". diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 0f3392a56f8..8f6e85555a8 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -2081,10 +2081,7 @@ builtin_round(PyObject *self, PyObject *args, PyObject *kwds) number /= f; else number *= f; - if (number >= 0.0) - number = floor(number + 0.5); - else - number = ceil(number - 0.5); + number = round(number); if (ndigits < 0) number *= f; else