Homepage  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


.dsy:it. .dsy:it. Archive > Community > Forum De Bell Tolls
 
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!

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate