Voglio sottrarre 2 valori double
e ho provato il seguente codice.BigDecimal Sottrazione
double val1 = 2.0;
double val2 = 1.10;
System.out.println(val1 - val2);
e ho avuto l'output come,
0.8999999999999999
Per ottenere output come 0.9
ho provato con BigDecimal
come segue,
BigDecimal val1BD = new BigDecimal(val1);
BigDecimal val2BD = new BigDecimal(val2);
System.out.println(val1BD.subtract(val2BD));
E ho avuto l'output come,
0.899999999999999911182158029987476766109466552734375
poi ho provato con BigDecimal.valueOf()
val1BD = BigDecimal.valueOf(val1);
val2BD = BigDecimal.valueOf(val2);
System.out.println(val1BD.subtract(val2BD));
E finalmente ho avuto l'output come 0.9
.
La mia domanda è qual è la differenza tra il caso 2 & caso 3?
Nel caso 2 perché ho ottenuto l'output in questo modo?
Forse vale la pena di ricordare che il modo migliore per inizializzare un 'BigDecimal' è da un' STRING' o 'char []'. Una volta che hai un doppio errore, è già stato fatto un errore di arrotondamento. La conversione di un 'String' può o non può annullare quell'errore. Matematicamente, il doppio valore esatto è la scelta migliore se si è interessati alla precisione. – Henry