Problemas de doble sum de precisión de Java

Me gustaría saber por qué me sale este error. (esto es Mostrar registro de depuración de Eclipse)

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

¡No puedo entender por qué no obtuve simplemente 2.97!

Si quería 2.97 , debería haber usado BigDecimal .

double s se almacenan como fracciones en binario , no en decimal. Entonces, 3.75 , por ejemplo, simplemente está almacenado como 2^1 + 2^0 + 2^(-1) + 2^(-2) .

2.8 y 0.17 no se pueden representar exactamente como fracciones binarias, por lo que habrá algún error de redondeo.

También puede encontrar este artículo útil.

Esto se debe a la precisión de los tipos de coma flotante en java (flotante y doble). Si necesita precisión indefinida, debe intentar usar BigDecimal lugar de double .