Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does Rounding in Python work?

I am a bit confused about how rounding in Python works.
Could someone please explain why Python behaves like this?

Example:

>>> round(0.05,1) # this makes sense
0.1
>>> round(0.15,1) # this doesn't make sense! Why is the result not 0.2?
0.1

And same for:

>>> round(0.25,1) # this makes sense
0.3
>>> round(0.35,1) # in my opinion, should be 0.4 but evaluates to 0.3
0.3

Edit: So in general, there is a possibility that Python rounds down instead of rounding up. So am I to understand that the only "abnormal" thing that can happen is that Python rounds down? Or may it also get rounded up "abnormally" due to how it is stored? (I haven't found a case where Python rounded up when I expected it to round down)

like image 406
Jonas Kaufmann Avatar asked Jan 05 '16 20:01

Jonas Kaufmann


2 Answers

This is actually by design. From Pythons' documentation:

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.

like image 77
Idos Avatar answered Sep 20 '22 23:09

Idos


It sounds to me like you need the decimal module:

from decimal import *
x = Decimal('0.15')
print x.quantize(Decimal('0.1'), rounding=ROUND_HALF_UP)

Output:

0.2
like image 40
Galax Avatar answered Sep 18 '22 23:09

Galax