Doppio calcolo che produce un risultato dispari

Ho 2 numeri memorizzati come Double, 1.4300 e 1.4350. Quando sottraggo 1.4350 – 1.4300, mi dà il risultato: 0.0050000000000001155. Perché aggiunge 1155 alla fine e come posso risolverlo in modo che restituisca 0,005 o 0,0050? Non sono sicuro che l’arrotondamento funzionerà poiché sto lavorando con 2 e 4 numeri decimali.

Oh, adoro questi … sono causati dall’inaccuratezza nella doppia rappresentazione e l’aritmetica a virgola mobile ne è piena. È spesso causato da numeri ricorrenti in binario (cioè rappresentazione in virgola mobile a base 2). Ad esempio, in decimale 1/3 = 0.3333 ‘In binario 1/10 è un numero ricorrente, il che significa che non può essere rappresentato perfettamente. Prova questo: 1 – 0.1 – 0.1 – 0.1 – 0.1. Non otterrai 0.6 🙂

Per risolvere questo, utilizzare BigDecimal (preferito) o manipolare il doppio prima di moltiplicarlo qualcosa come 10000, quindi arrotondarlo e quindi dividerlo nuovamente (meno pulito).

Bella domanda … ha causato enormi problemi in passato. I missili superano bersagli, i satelliti si infrangono dopo il lancio, ecc. Cerca nel web per alcuni, sarai sbalordito!

Questa è una trappola comune con alcune rappresentazioni computerizzate di numeri frazionari, vedi questa domanda o google per precisione in virgola mobile .

Double non è il tipo giusto per calcoli in virgola mobile molto precisi, se vuoi ottenere risultati esatti devi usare BigDecimal.