summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Dower <steve.dower@microsoft.com>2015-04-15 20:10:59 (GMT)
committerSteve Dower <steve.dower@microsoft.com>2015-04-15 20:10:59 (GMT)
commitcb39d1f466eeecbec969f50a5df609eb0a863084 (patch)
treecd4fd87d2cc51a15730a5e061075a5da8e069b9b
parent807b80d4ec9d9dd2c0f5e6a4bf07caa7c90625e1 (diff)
downloadcpython-cb39d1f466eeecbec969f50a5df609eb0a863084.zip
cpython-cb39d1f466eeecbec969f50a5df609eb0a863084.tar.gz
cpython-cb39d1f466eeecbec969f50a5df609eb0a863084.tar.bz2
Issue 19933: Provide default argument for ndigits in round. Patch by Vajrasky Kok.
-rw-r--r--Doc/library/functions.rst4
-rw-r--r--Lib/test/test_float.py8
-rw-r--r--Misc/NEWS3
-rw-r--r--Objects/floatobject.c5
4 files changed, 16 insertions, 4 deletions
diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst
index 456dd09..e982ceb 100644
--- a/Doc/library/functions.rst
+++ b/Doc/library/functions.rst
@@ -1225,8 +1225,8 @@ are always available. They are listed here in alphabetical order.
.. function:: round(number[, ndigits])
Return the floating point value *number* rounded to *ndigits* digits after
- the decimal point. If *ndigits* is omitted, it defaults to zero. Delegates
- to ``number.__round__(ndigits)``.
+ the decimal point. If *ndigits* is omitted, it returns the nearest integer
+ to its input. Delegates to ``number.__round__(ndigits)``.
For the built-in types supporting :func:`round`, values are rounded to the
closest multiple of 10 to the power minus *ndigits*; if two multiples are
diff --git a/Lib/test/test_float.py b/Lib/test/test_float.py
index 071d217..4251090 100644
--- a/Lib/test/test_float.py
+++ b/Lib/test/test_float.py
@@ -773,6 +773,14 @@ class RoundTestCase(unittest.TestCase):
test(sfmt, NAN, ' nan')
test(sfmt, -NAN, ' nan')
+ def test_None_ndigits(self):
+ for x in round(1.23), round(1.23, None), round(1.23, ndigits=None):
+ self.assertEqual(x, 1)
+ self.assertIsInstance(x, int)
+ for x in round(1.78), round(1.78, None), round(1.78, ndigits=None):
+ self.assertEqual(x, 2)
+ self.assertIsInstance(x, int)
+
# Beginning with Python 2.6 float has cross platform compatible
# ways to create and represent inf and nan
diff --git a/Misc/NEWS b/Misc/NEWS
index c7584b2..5f5cac6 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -36,6 +36,9 @@ Core and Builtins
Library
-------
+- Issue 19933: Provide default argument for ndigits in round. Patch by
+ Vajrasky Kok.
+
- Issue #23193: Add a numeric_owner parameter to
tarfile.TarFile.extract and tarfile.TarFile.extractall. Patch by
Michael Vogt and Eric Smith.
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 1d369f9..d681981 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -986,8 +986,9 @@ float_round(PyObject *v, PyObject *args)
x = PyFloat_AsDouble(v);
if (!PyArg_ParseTuple(args, "|O", &o_ndigits))
return NULL;
- if (o_ndigits == NULL) {
- /* single-argument round: round to nearest integer */
+ if (o_ndigits == NULL || o_ndigits == Py_None) {
+ /* single-argument round or with None ndigits:
+ * round to nearest integer */
rounded = round(x);
if (fabs(x-rounded) == 0.5)
/* halfway case: round to even */