Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    207

    [JS] curioso problema con somme

    uso questo script
    codice:
    	
    for (x=1; x<=numero_prodotti; x++) {
    		qta=prc.elements["qta"+x].value;
    		if(isNaN(qta)) alert("Si è verificato un errore");
    		p=prc.elements["p"+x].value;
    		if(isNaN(p)) alert("Si è verificato un errore");
    		parziale=qta*p;
    		totale+=parziale;
    		//alert(totale);
    }
    qta1, qta2, qta3 sono campi che contengono numeri interi [1,2,3,4..]
    p1,p2,p3 sono campi hidden che contengono prezzi nel formato [11.00, 9.9, 10.56....]

    La cosa curiosa è che il risultato dato è un float del tipo 21.8999999996.
    Faccio un esempio, se mi tovo nella situazione:
    11.00*1+
    9.9*1+
    9.9*1+
    9.9*1=
    40.699999999999996
    ****al posto di 40.7****
    Cosa sbaglio?

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Sbagli solo a non considerare che i numeri in javascript sono rappresentati in virgola mobile... un arrotondamento del risultato e' sempre opportuno in presenza di moltiplicazioni e divisioni.

    risultato = Math.round(risultato*100)/100

    Questo, per esempio, arrotonda a due cifre decimali.

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    207
    Grazie per l'aiuto, il tua script funziona perfettamente.
    Cmq non capisco....da questa somma:
    11.00*1+
    9.9*1+
    9.9*1+
    9.9*1=
    mi aspetterei 40.7000000000000 e non 40.699999999999996.

  4. #4
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Originariamente inviato da br1
    Sbagli solo a non considerare che i numeri in javascript sono rappresentati in virgola mobile... un arrotondamento del risultato e' sempre opportuno in presenza di moltiplicazioni e divisioni.
    Cos'e' che non ti e' chiaro?

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    207
    Perchè 11.00*1+9.9*1+9.9*1+9.9*1 mi rende 40.699999999999996 ?
    Come vengono visti i numeri in virgola mobile? E' come se 9.9 non venisse visto com tale ma come 9.900000000000001 o qualcosa del genere e se la cosa è così perchè?
    Mi sto spiegando malissimo....ho le idee abbastanze confuse.

  6. #6
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Tu fai quattro moltiplicazioni... prova a farle usando le tabelle logaritmiche, poi ne riparliamo...

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.