Java double precision sum trouble

double, floating-point, java

Solution

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.

Problem

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!

Original source

Related problems