Commit 3764f3bb authored by Guido van Rossum's avatar Guido van Rossum

Implement round() slightly different, so that for negative ndigits no

additional errors happen in the last step.  The trick is to avoid
division by 0.1**n -- multiply by 10.0**n instead.
parent 3d66faca
......@@ -1488,14 +1488,22 @@ builtin_round(self, args)
if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
return NULL;
f = 1.0;
for (i = ndigits; --i >= 0; )
i = abs(ndigits);
while (--i >= 0)
f = f*10.0;
for (i = ndigits; ++i <= 0; )
f = f*0.1;
if (ndigits < 0)
x /= f;
else
x *= f;
if (x >= 0.0)
return PyFloat_FromDouble(floor(x*f + 0.5) / f);
x = floor(x + 0.5);
else
x = ceil(x - 0.5);
if (ndigits < 0)
x *= f;
else
return PyFloat_FromDouble(ceil(x*f - 0.5) / f);
x /= f;
return PyFloat_FromDouble(x);
}
static PyObject *
......
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