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
.