Così, quando aggiungo o sottraggo in Java con Doubles, mi danno strani risultati. Eccone alcuni:L'aggiunta e la sottrazione di doppi danno strani risultati
Se aggiungo 0.0 + 5.1
, mi dà 5.1
. È corretto.
Se aggiungo 5.1 + 0.1
, mi dà 5.199999999999
(Il numero di ripetizioni 9
s potrebbe essere spento). È sbagliato.
Se sottraggo 4.8 - 0.4
, mi dà 4.39999999999995
(Anche in questo caso, il ripetuto 9
s potrebbe essere spento). È sbagliato.
All'inizio pensavo che questo fosse solo il problema con l'aggiunta di doppi con valori decimali, ma mi sbagliavo. Di seguito ha funzionato bene:
5.1 + 0.2 = 5.3
5.1 - 0.3 = 4.8
Ora, il primo numero aggiunto è un doppio salvato come variabile, anche se la seconda variabile afferra il testo da un JTextField
. Per esempio:
//doubleNum = 5.1 RIGHT HERE
//The textfield has only a "0.1" in it.
doubleNum += Double.parseDouble(textField.getText());
//doubleNum = 5.199999999999999
btw, preferisce utilizzare BigDecimal (http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html) – user2147970
In realtà 5.19999999 ... (con infiniti ripetuti 9's) è matematicamente identico a 5.2, se non ci credi, prova a scoprire qual è la differenza tra i due. È 0, quindi sono uguali. – Ingo
@Ingo tecnicamente, sì, ma mi piacerebbe avere una risposta un po 'precisa :) –