Guai a sum doppia precisione Java

Vorrei sapere perché ottengo questo errore. (questo è il registro di visualizzazione del debug di Eclipse)

var (double) 2.8 tot.getIva() (java.lang.Double) 0.17 var+tot.get() (double) 2.9699999999999998 

Non riesco a capire perché non ho ottenuto semplicemente 1,97!

Se volevi 2.97 , avresti dovuto usare BigDecimal .

double s sono memorizzati come frazioni in binario , non decimali. Quindi, 3.75 , per esempio, è appena memorizzato come 2^1 + 2^0 + 2^(-1) + 2^(-2) .

2.8 e 0.17 non possono essere rappresentati esattamente come frazioni binarie, quindi ci sarà un errore di arrotondamento.

Potresti trovare questo articolo utile.

Ciò è dovuto alla precisione dei tipi a virgola mobile in java (float e double). Se hai bisogno di precisione indefinita, dovresti provare a utilizzare BigDecimal anziché double .