 | |
Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum |
Java: 0.3 * 3 = 0.8999999999999999 ??? Clicca QUI per vedere il messaggio nel forum |
GaL3n |
Buondi' a tutti,
una domandina veloce veloce..sin da piccolo ho creduto che 0.3 * 3 risultasse 0.9 MAH.. mah oggi qualcosa di strano è subentrato nella mia vita..
public class p {
public static void main(String[] args) {
double val=0;
double n1=0.3;
double n2=3;
val=(n1*n2);
System.out.println("val dopo calcolo: " + val);
}
}
Perchè mi restituisce un bel 0.8999999999999999 ??
Forse non sto bene io.. ma mi sembra un tantino sbagliato!;)
Fatemi sapere GRAZIE.. Baco di JAVA? oddio diverrò mILLLLiaRdArio! ;) ;) :) |
Ryudo |
Il risultato e' giusto, i computer hanno dei limiti nella rappresentazione binaria di numeri in virgola mobile.
In realta' non viene memorizzato 0.3 ma un numero sensibilmente minore.
Ad esempio sul mio pc eseguendo questo codice c:
int main(){
double d = 0.3;
printf("%.40f",d);
}
ottengo
0.2999999999999999888977697537484345957637
Per risolvere il problema prova a usare la classe java.math.BigDecimal |
jdhoring |
Off-Topic:
Volevo giusto vedere quanto tempo ci sarebbe voluto per vedere la risposta :)
|
GaL3n |
Originally posted by Ryudo
Il risultato e' giusto, i computer hanno dei limiti nella rappresentazione binaria di numeri in virgola mobile.
In realta' non viene memorizzato 0.3 ma un numero sensibilmente minore.
Ad esempio sul mio pc eseguendo questo codice c:
int main(){
double d = 0.3;
printf("%.40f",d);
}
ottengo
0.2999999999999999888977697537484345957637
Per risolvere il problema prova a usare la classe java.math.BigDecimal
Thx Ryudo ;)
E complimenti per l'icona che e' STUPENDA ;) ;) :)
Saluti :) |
Ryudo |
Originally posted by GaL3n
E complimenti per l'icona che e' STUPENDA ;) ;) :)
grazie :D:D |
AlphaGamma |
Ma sei sicuro di non avere un bel pentium 1 bacato? :D |
ElEtAbbOZ |
non c'entra niente... ma matematicamente parlando 0,8(9) equivale a 0,9 |
0m4r |
prova a usare la clkasse NumberFormat, o qualcosa del genere, di java, magari c'è qualcosa che ti puo essere utile; se non sbaglio puoi specificare il numero di decimale che ti interessano e anche l'arrotondamento... |
webwarrior |
Via tra, informaticamente parlando è giusto.
:teach:
Java usa la rappresentazione IEEE 754 per le variabili floating point dove sostanzialmente il numero viene memorizzato come la somma di frazioni aventi come denominatore le potenze di due.
In questa rappresentazione, un numero particolarmente ostico è 0.1. E' infatti il risultato di una serie infinita:
0.1 = 1/16 + 1/32 + 1/256 + 1/512 + 1/4096 + 1/8192 + ...
Il suggerimento di "Ryudo" è giusto. BigDecimal non usa IEEE 754 (ma ha tuttavia dei caveat che ora non ricordo) |
Sephirot |
Originally posted by GaL3n
Fatemi sapere GRAZIE.. Baco di JAVA? oddio diverrò mILLLLiaRdArio! ;) ;) :)
ti è andata male
ritenta sarai più fortunato :D |
GaL3n |
Originally posted by webwarrior
Via tra, informaticamente parlando è giusto.
:teach:
Java usa la rappresentazione IEEE 754 per le variabili floating point dove sostanzialmente il numero viene memorizzato come la somma di frazioni aventi come denominatore le potenze di due.
In questa rappresentazione, un numero particolarmente ostico è 0.1. E' infatti il risultato di una serie infinita:
0.1 = 1/16 + 1/32 + 1/256 + 1/512 + 1/4096 + 1/8192 + ...
Il suggerimento di "Ryudo" è giusto. BigDecimal non usa IEEE 754 (ma ha tuttavia dei caveat che ora non ricordo)
GRAZIE RAGAZZI,
come sempre molto esaustivi ;)))
Anche BigDecimal da lo stesso risultato.. ;)
BACI! |
|
|
|
|