Perchè dal frammento di questo codice, il risultato che visualizzo sullo schermo è: 0.0?? o_Ocodice:double r = 1/2; System.out.println(r);
Perchè dal frammento di questo codice, il risultato che visualizzo sullo schermo è: 0.0?? o_Ocodice:double r = 1/2; System.out.println(r);
1 è una costante intera, 2 è una costante intera. Ne deriva che la divisione è "intera", non floating-point.Originariamente inviato da Dreamer89
Perchè dal frammento di questo codice, il risultato che visualizzo sullo schermo è: 0.0?? o_Ocodice:double r = 1/2; System.out.println(r);
Se fosse stato ad esempio:
double r = 1.0/2;
o
double r = (double) 1/2;
Allora nel caso sopra 1.0 è una costante double mentre nel caso sotto il 1 intero viene convertito a double prima della divisione.
L'altro operando (il 2 intero) sarebbe stato convertito automaticamente a double e la divisione sarebbe stata fatta in floating-point, dando come risultato 0.5.
Rivedi le Conversions and Promotions in particolare la "Binary Numeric Promotion", perché sono fondamentali.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Perfetto grazie mille ^^Originariamente inviato da andbin
1 è una costante intera, 2 è una costante intera. Ne deriva che la divisione è "intera", non floating-point.
Se fosse stato ad esempio:
double r = 1.0/2;
o
double r = (double) 1/2;
Allora nel caso sopra 1.0 è una costante double mentre nel caso sotto il 1 intero viene convertito a double prima della divisione.
L'altro operando (il 2 intero) sarebbe stato convertito automaticamente a double e la divisione sarebbe stata fatta in floating-point, dando come risultato 0.5.
Rivedi le Conversions and Promotions in particolare la "Binary Numeric Promotion", perché sono fondamentali.
Approfitto del topic per domanda un'altra cosa, questo è il codice:
Perchè sullo schermo mi appare 5,699999999999 invece di 5,7? o_Ocodice:double r = 5.6; double w = 0.1; System.out.println(r+w);
L'utilizzo di numeri floating-point pone diverse questioni spinose e noiose (e non posso spiegarle tutte in un post).Originariamente inviato da Dreamer89
Approfitto del topic per domanda un'altra cosa, questo è il codice:
Perchè sullo schermo mi appare 5,699999999999 invece di 5,7? o_Ocodice:double r = 5.6; double w = 0.1; System.out.println(r+w);
Si parte dal presupposto che non tutti i numeri "reali" possono essere rappresentati in modo perfetto con valori floating-point su un numero limitato di bit. 0,75 può essere rappresentato in modo perfetto. 0,8 no e nemmeno 5,6 oppure 0.1. Questi ultimi tre saranno molto molto vicini al valore che dovrebbero avere ma non potranno mai essere precisamente quel valore su un numero finito e limitato di bit.
A ciò si aggiungono gli errori introdotti dai calcoli fatti dall'algoritmo che si occupa della formattazione del numero in stringa.
Per farla breve, per formattare in modo utile un valore floating-point, usa un java.text.NumberFormat oppure usa la nuova funzionalità di formattazione (da Java 5) con format().
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Ho provato con String.format() e il problema viene risolto... però mi sembra così tanto strano un'imprecisione del genere. Bho o_O Grazie mille comunque, sei sempre di grandissimo aiuto ^^Originariamente inviato da andbin
L'utilizzo di numeri floating-point pone diverse questioni spinose e noiose (e non posso spiegarle tutte in un post).
Si parte dal presupposto che non tutti i numeri "reali" possono essere rappresentati in modo perfetto con valori floating-point su un numero limitato di bit. 0,75 può essere rappresentato in modo perfetto. 0,8 no e nemmeno 5,6 oppure 0.1. Questi ultimi tre saranno molto molto vicini al valore che dovrebbero avere ma non potranno mai essere precisamente quel valore su un numero finito e limitato di bit.
A ciò si aggiungono gli errori introdotti dai calcoli fatti dall'algoritmo che si occupa della formattazione del numero in stringa.
Per farla breve, per formattare in modo utile un valore floating-point, usa un java.text.NumberFormat oppure usa la nuova funzionalità di formattazione (da Java 5) con format().