Can someone please explain what’s happening below: (I use Python 3.3)
1. >>> Decimal("0.1") + Decimal("0.1") + Decimal("0.1") - Decimal("0.3")
Decimal('0.0')
2. >>> Decimal(0.1) + Decimal(0.1) + Decimal(0.1) - Decimal(0.3)
Decimal('2.775557561565156540423631668E-17')
3. >>> Decimal(0.1 + 0.1 + 0.1 - 0.3)
Decimal('5.5511151231257827021181583404541015625E-17')
I know it has to do with floating point limitation, I’d be glad if someone can explain why
- What has the
" "got to do with the difference between example 1 and 2 above - Why does 2 produce a difference answer from 3 given that both have no
" "?
In a nutshell, neither
0.1nor0.3can be represented exactly asfloat:Consequently, when you use
0.1or0.3to initializeDecimal(), the resulting value is approximately0.1or0.3.Using strings (
"0.1"or"0.3") does not have this problem.Finally, your second example produces a different result to your third example because, even though both involve implicit rounding, they involve rounding to a different number of decimal places.