From: Mark Dickinson Date: Sat, 18 Apr 2009 14:59:42 +0000 (+0000) Subject: Issue #1869: Fix a couple of minor round() issues. X-Git-Tag: v2.7a1~1460 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1bdf7e9caba735ba404d49026dacd67636ea5c5f;p=python Issue #1869: Fix a couple of minor round() issues. --- diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index 6671f2c02e..19ce9ec83d 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 f226eb1a39..58197de049 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 0f3392a56f..8f6e85555a 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