Newsgroup: it.comp.lang.javascript
Titolo: [?] Sottrazione: ne sto uscendo pazzo

alert(21.87-19.91);
alert(49.41-15.52);
Il secondo dà risultato corretto, mentre il primo impazzisce
(1.9600000000008).
Come mai?
Ho risolto con logica "moltiplico * 100, round, ridivido per 100" ma la
curiosità resta.
Ho provato a usare Number ma non è cambiato nulla.
Grazie.

 wrote in message
news:970io1$avs$1...@fe1.cs.interbusiness.it...

Ciao Cristiano,
non sono sicuro, ma quando devi fare delle operazioni è meglio che assegni
il risultato ad una variabile temporanea e poi ne visualizzi il contenuto.
tipo :
var vResult
vResult = 21.87-19.91;
window.alert(vResult);
Prova un pò sta roba.
                                             Stefano

Uguale, ahimé
Sicuramente è collegato al floating point, ma perché? (ricordo in realtà un
problema simile con floating point del "vecchio" (ma sempre amato) Pascal...

Il Wed, 21 Feb 2001 15:29:41 +0100, Cristiano Larghi ha scritto.....

Non stare ad impazzirci.
E' un bug di JavaScript! A mia memoria il primo che se n'è accorto è stato 
Zer0, se trovo il vecchio messaggio lo posto(sarà stato un anno fa)
Intanto divertiti a fargli fare questo conto: 2.1-2.0
Sia in console che in qualsiasi calcolatrice! :-)))
Anche quella pubblicata sul sito di microsoft da lo stesso problema, è un bug 
nei calcoli floating-point.
Concludemmo il thread con una domanda ancora senza risposta: E se dovessimo 
fare calcoli balistici?
:-)))
-- 
Ciao, Riccardo
------------------------------------------------------------------------
WebMaster: ----> 
http://www.jsdir.com
 <---- (aka 
http://www.jspoint.it
)
------------------------------------------------------------------------
               Nessun traguardo è abbastanza lontano.
------------------------------------------------------------------------

 Zer0, se trovo il vecchio messaggio lo posto(sarà stato un anno fa)
Mi smentisco subito... il thread è del 20 settembre 2000
Il risultato fu... che è un bug noto nientedimeno che a Netscape.
Fabiano trovò questi tue links:
http://developer.netscape.com/support/faqs/champions/javascript.html#2-2
http://www2.hursley.ibm.com/decimal/decifaq.htm
. . . e chiudemmo la partita :-(


Sono senza parole...Ci sono allora ancora gli stessi vecchi problema del
Pascal, con la differenza che in JS manca il concetto di Single e Double per
aumentare la precisione.
Vergogna
Grazie comunque, mi adatto col Math.round.

 impazzisce (1.9600000000008).
È normale e dipende dalla rappresentazione interna dei numeri reali, come
potenza di 2. I numeri decimali, purtroppo, non si prestano ad essere
rappresentati correttamente come potenza di 2.
Per avere risultati corretti sarebbe necessario usare il formato BCD, ma che
richiede tempi di elaborazione leggermente superiori.
Tutto questo vuol dire solo che il javascript non è adatto a fare calcoli
precisi. Per dare la sensazione di calcoli precisi si possono visualizzare solo
un numero limitato di cifre dopo la virgola.
Maurizio.

Concordo, ma alert(21.87-19.91) non mi sembra una richiesta folle....

 ha scritto nel messaggio
news:97353b$jhn$1...@fe2.cs.interbusiness.it...


 alert((21.87*x-19.91*x)/x)

 wrote in message
975aut$fj0$1...@fe1.cs.interbusiness.it...

microsoft ha introdotto due metodi per risolvere il problema.
toFixed(2)
toPrecision(2)
Faq n 108 su 
http://www.jsdir.com
andreotta fabiano
 WebMªster ATI POWER s.n.c.
 
andr...@atipower.it
 
http://www.atipower.it
    -new-
 
http://www.afdsoftware.freeweb.org
 
http://www.jsdir.com

Pregiatissimi (lato server, lato client ahimé inusabili per versione).
p.s. ho trovato documentazione nell'help Microsoft perché 
jsdir.com
 è
praticamente inapribile (siete diventati delle star dopo IoProgrammo? Ddos?)
:-)))