floating point woes

Chris Rebert clp2 at rebertia.com
Wed Feb 16 01:09:58 CET 2011

On Tue, Feb 15, 2011 at 3:49 PM, Hans-Peter Jansen <hpj at urpla.net> wrote:
> Hi,
> while I usually cope with the woes of floating point issues, this is
> one, that I didn't expect:
>>>> round(2.385, 2)
> 2.3799999999999999
> Doesn't the docs say, it's rounded up for this case?
> <quote>
> Values are rounded to the closest multiple of 10 to the power minus n;
> if two multiples are equally close, rounding is done away from 0
> </quote>
> Well, that one is clearly rounding down.
> What's up, eh, down here?

http://docs.python.org/library/functions.html#round :
Note: The behavior of round() for floats can be surprising: for
example, round(2.675, 2) gives 2.67 instead of the expected 2.68. This
is not a bug: it’s a result of the fact that most decimal fractions
can’t be represented exactly as a float. See "Floating Point
Arithmetic: Issues and Limitations"[1] for more information.
[1]: http://docs.python.org/tutorial/floatingpoint.html

And indeed:
>>> from decimal import Decimal
>>> Decimal(2.385)

Which, rounded to 2 decimal places, gives us 2.38, which is in turn
approximated as:

I encourage reading [1].


More information about the Python-list mailing list