Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di matrics
    Registrato dal
    Jul 2004
    Messaggi
    502

    precisione dei decimali

    Ho questo semplice script
    codice:
    var list_coefficienti = document.getElementsByName("list_coefficienti");
    var sum = 0;
    function checkSum(){
    	var sum = 0;
    	for (i = 0; i < list_coefficienti.length; i ++)
    	{
    		sum += parseFloat(list_coefficienti[i].value, 6);
    	}
    	alert("resta ancora un coefficientente pari a  " + parseFloat((1 - sum),6));
    	return;
    }
    che ad ogni modifica di un campo di testo chiama la funzione checkSum per farne la somma e dirmi quanto manca per arrivare ad uno.
    Vorrei che la precisione fosse di 6 decimali, ma andando a testare invece non ci sono limiti, arrivo agli esponenziali!!!

  2. #2
    codice:
    var list_coefficienti = document.getElementsByName("list_coefficienti");
    var sum = 0;
    function checkSum(){
    	var sum = 0;
    	for (i = 0; i < list_coefficienti.length; i ++)
    	{
    		sum += Math.round(parseFloat(list_coefficienti[i].value)*1000000)/1000000;
    	}
    	alert("resta ancora un coefficientente pari a  " + (1-sum));
    	return;
    }
    parseFloat ha in ingresso un solo parametro (una stringa) non puoi inventarti altri parametri

    Purtroppo bisogna imparare che il computer non sbaglia...fa solo quello che gli dici di fare

    www.netpolaris.it

  3. #3
    Utente di HTML.it L'avatar di matrics
    Registrato dal
    Jul 2004
    Messaggi
    502
    Originariamente inviato da Shagrat
    codice:
    var list_coefficienti = document.getElementsByName("list_coefficienti");
    var sum = 0;
    function checkSum(){
    	var sum = 0;
    	for (i = 0; i < list_coefficienti.length; i ++)
    	{
    		sum += Math.round(parseFloat(list_coefficienti[i].value)*1000000)/1000000;
    	}
    	alert("resta ancora un coefficientente pari a  " + (1-sum));
    	return;
    }
    parseFloat ha in ingresso un solo parametro (una stringa) non puoi inventarti altri parametri


    giuro che da qualche parte avevo letto che prendeva anche il secondo parametro

    cmq non va nemmeno così

  4. #4
    a me funziona, cosa vuol dire "non va nemmeno così"?
    cosa ti restituisce l'alert?
    nei campi list_coefficienti metti valori che possono essere "parsati" come float (ciò vuol dire, per esempio, numeri che hanno il punto e non la virgola come separatore decimale)?
    Purtroppo bisogna imparare che il computer non sbaglia...fa solo quello che gli dici di fare

    www.netpolaris.it

  5. #5
    Utente di HTML.it L'avatar di matrics
    Registrato dal
    Jul 2004
    Messaggi
    502
    Originariamente inviato da Shagrat
    a me funziona, cosa vuol dire "non va nemmeno così"?
    cosa ti restituisce l'alert?
    nei campi list_coefficienti metti valori che possono essere "parsati" come float (ciò vuol dire, per esempio, numeri che hanno il punto e non la virgola come separatore decimale)?
    si si passo valori corretti, ti faccio un esempio di quello che passo:
    1 -(ovviamente non passo 1, questo è quello che fa la funzione)
    0.333333+
    0.33333+
    0.333=
    -------------------------------
    0.0003370000000000317

  6. #6
    Utente di HTML.it L'avatar di matrics
    Registrato dal
    Jul 2004
    Messaggi
    502
    codice:
    var list_coefficienti = document.getElementsByName("list_coefficienti");
    function checkSum(){
    	var sum = 0;
    	for (i = 0; i < list_coefficienti.length; i ++)
    	{
    		sum += Math.round(parseFloat(list_coefficienti[i].value)*1000000)/1000000;
    	}
    	alert("resta ancora un coefficientente pari a  " + (Math.round(parseFloat(1-sum)*1000000)/1000000));
    	return;
    }
    risolto!

  7. #7
    prova così:

    codice:
       var list_coefficienti = document.getElementsByName("list_coefficienti");
        var sum = 0;
        function checkSum(){
        	var sum = 0;
        	for (i = 0; i < list_coefficienti.length; i ++)
        	{
        		sum += parseFloat(list_coefficienti[i].value);
        	}
        	    		
      		sum = Math.round(sum*1000000)/1000000;
      		unoMenoSum = Math.round((1-sum)*1000000)/1000000;
        	alert("somma " + sum);
          alert("resta ancora un coefficientente pari a  " + unoMenoSum);
        	return;
        }
    il problema nella funzione di prima è che si arrotondavano a 6 decimali gli addendi e non la somma e nemmeno la differenza che ti interessava come risultato

    Purtroppo bisogna imparare che il computer non sbaglia...fa solo quello che gli dici di fare

    www.netpolaris.it

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 © 2026 vBulletin Solutions, Inc. All rights reserved.