0

I noticed this strange behavior in a part of my code:

num = 0.14
num += 0.01

if num == 0.15:
    print('equal')
elif num > 0.15:
    print('greater')
elif num < 0.15:
    print('less')

> greater

I assume this is because of binary rounding errors, so num is actually stored as 0.1500000000001 or something. I'm just wondering what is the best way to avoid these kinds of errors in conditional statements?

aydow
  • 3,673
  • 2
  • 23
  • 40
berkelem
  • 2,005
  • 3
  • 18
  • 36

1 Answers1

2

Of course rounding:

num = 0.14
num += 0.01
num=round(num,2)
if num == 0.15:
    print('equal')
elif num > 0.15:
    print('greater')
elif num < 0.15:
    print('less')

Output:

equal

Even better decimal module:

from decimal import Decimal
num = Decimal('0.14')
num += Decimal('0.01')
num=float(num)
if num == 0.15:
    print('equal')
elif num > 0.15:
    print('greater')
elif num < 0.15:
    print('less')

Output:

equal

And of course, compare decimal.Decimal types:

from decimal import Decimal
num = Decimal('0.14')
num += Decimal('0.01')
if num == Decimal('0.15'):
    print('equal')
elif num > Decimal('0.15'):
    print('greater')
elif num < Decimal('0.15'):
    print('less')

Output:

equal
U13-Forward
  • 69,221
  • 14
  • 89
  • 114