I would like to know why I get this error. (this is Display log of Eclipse debug)
var
(double) 2.8
tot.getIva()
(java.lang.Double) 0.17
var+tot.get()
(double) 2.9699999999999998
I can not understand why I did not get simply 2.97!
I would like to know why I get this error. (this is Display log of Eclipse debug)
var
(double) 2.8
tot.getIva()
(java.lang.Double) 0.17
var+tot.get()
(double) 2.9699999999999998
I can not understand why I did not get simply 2.97!
If you wanted 2.97
, you should have used BigDecimal
.
double
s are stored as fractions in binary, not decimal. So 3.75
, for example, is just stored as 2^1 + 2^0 + 2^(-1) + 2^(-2)
.
2.8
and 0.17
cannot be represented exactly as binary fractions, so there's going to be some rounding error.
You may also find this article helpful.
This is due to the precision of floating point types in java (float and double). If you need indefinite precision you should try using BigDecimal
instead of double
.