Kaydet (Commit) f0f1c239 authored tarafından Raymond Hettinger's avatar Raymond Hettinger

Issue 27936: Fix inconsistent round() behavior between float and int

üst 22c108f0
No related merge requests found
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
import ast import ast
import builtins import builtins
import collections import collections
import decimal
import fractions
import io import io
import locale import locale
import os import os
...@@ -1244,6 +1246,15 @@ class BuiltinTest(unittest.TestCase): ...@@ -1244,6 +1246,15 @@ class BuiltinTest(unittest.TestCase):
self.assertEqual(round(5e15+2), 5e15+2) self.assertEqual(round(5e15+2), 5e15+2)
self.assertEqual(round(5e15+3), 5e15+3) self.assertEqual(round(5e15+3), 5e15+3)
def test_bug_27936(self):
# Verify that ndigits=None means the same as passing in no argument
for x in [1234,
1234.56,
decimal.Decimal('1234.56'),
fractions.Fraction(123456, 100)]:
self.assertEqual(round(x, None), round(x))
self.assertEqual(type(round(x, None)), type(round(x)))
def test_setattr(self): def test_setattr(self):
setattr(sys, 'spam', 1) setattr(sys, 'spam', 1)
self.assertEqual(sys.spam, 1) self.assertEqual(sys.spam, 1)
......
...@@ -967,7 +967,7 @@ class LongTest(unittest.TestCase): ...@@ -967,7 +967,7 @@ class LongTest(unittest.TestCase):
self.assertIs(type(got), int) self.assertIs(type(got), int)
# bad second argument # bad second argument
bad_exponents = ('brian', 2.0, 0j, None) bad_exponents = ('brian', 2.0, 0j)
for e in bad_exponents: for e in bad_exponents:
self.assertRaises(TypeError, round, 3, e) self.assertRaises(TypeError, round, 3, e)
......
...@@ -18,6 +18,10 @@ Core and Builtins ...@@ -18,6 +18,10 @@ Core and Builtins
``m_methods`` field to be used to add module level functions to instances ``m_methods`` field to be used to add module level functions to instances
of non-module types returned from ``Py_create_mod``. Patch by Xiang Zhang. of non-module types returned from ``Py_create_mod``. Patch by Xiang Zhang.
- Issue #27936: The round() function accepted a second None argument
for some types but not for others. Fixed the inconsistency by
accepting None for all numeric types.
- Issue #27487: Warn if a submodule argument to "python -m" or - Issue #27487: Warn if a submodule argument to "python -m" or
runpy.run_module() is found in sys.modules after parent packages are runpy.run_module() is found in sys.modules after parent packages are
imported, but before the submodule is executed. imported, but before the submodule is executed.
......
...@@ -2039,7 +2039,7 @@ builtin_round(PyObject *self, PyObject *args, PyObject *kwds) ...@@ -2039,7 +2039,7 @@ builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
return NULL; return NULL;
} }
if (ndigits == NULL) if (ndigits == NULL || ndigits == Py_None)
result = PyObject_CallFunctionObjArgs(round, NULL); result = PyObject_CallFunctionObjArgs(round, NULL);
else else
result = PyObject_CallFunctionObjArgs(round, ndigits, NULL); result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment