Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Calcolo prezzo + iva * quantità...

    ho qualch eproblema di arrotondamento...
    non essendo molto pratico di JS avrei bisogno di una mano per questo calcolo.
    PEr ora ho scrtto questo, ma i valori che mi vengono restituiti nonsono corretti:

    codice:
    function calcola1(){
    var prezzo = parseFloat(document.form1.prezzo_uni1.value);
    var iva = (prezzo*document.form1.iva1.value)/100;
    var q = document.form1.quantita1.value;
    
    document.form1.totale1.value = parseFloat((prezzo + iva)*q);
    }
    Potete dirmi cosa sbaglio?
    Esco sempre pazzo conq uesti arrotondamenti...

    Grazie

  2. #2
    Form
    codice:
    <form action="test.php" method="post" id="form1" >
    	Prezzo: <input type="text" id="prezzo_uni1" name="prezzo_uni1" value="" >
    
    	Iva: <input type="text" id="iva1" name="iva1" value="" >
    
    	Quantit&agrave;: <input type="text" id="quantita1" name="quantita1" value="" >
    
    	<input type="button" value="calcola" onclick="calcola1()" id=button1 name=button1>
    	Totale: <input type="text" id="totale1" name="totale1" value="" >
    	
    </form>
    script
    codice:
    <script type="text/javascript">
    	
    	function calcola1(){
    		var prezzo = parseFloat(document.getElementById ("prezzo_uni1").value);
    		var iva=document.getElementById ("iva1").value
    		iva=(prezzo*iva)/100
    		var q =document.getElementById ("quantita1").value 
    		document.getElementById ("totale1").value =parseFloat((prezzo + iva)*q);
    	
    	}
    
    	</script>

    che errori ti da?

  3. #3
    Modifica lo script

    ho aggiunto l'arrotondamento a due cifre decimali

    codice:
    function calcola1(){
     var prezzo = parseFloat(document.getElementById ("prezzo_uni1").value);
     var iva=document.getElementById ("iva1").value
     iva=(prezzo*iva)/100
     var q =document.getElementById ("quantita1").value 
     var tot=parseFloat((prezzo + iva)*q);
     tot = String(Math.round(tot*100)/100);
     tot = (tot.indexOf(".")>=0)?tot+"0":tot+".00";
     tot = tot.substr(0,tot.indexOf(".")+3); 
     document.getElementById ("totale1").value =tot
    	
    }

  4. #4
    Grazie per la risposta OcchioCrepato, mentre aspettavo ho modificato notevolemente la funzione e sono arrivato ad una soluzione, che è in pratica la stessa che mi hai dato tu.
    Mi spiego.
    La funzione che ho fatto è questa:
    codice:
    function calcola1(){
      var ff = document.form1;
      var q = parseFloat(ff.quantita1.value);
      var imp = parseFloat(ff.prezzo_uni1.value);
      var aliquota = parseFloat(ff.iva1.value);
      var iva = imp * (aliquota/100);
      var tot = (imp + iva)*q;
    
      ff.totale1.value = tot;
      
    }
    che così come la tua, e ti ringrazio per questo, fa bene i calcoli tranne che per una piccola cosa.
    Funziona solo se il valore unitario del prodotto ha come separatore decimale il punto, e non la virgola come lo mostro io.
    E poi anche il totale, anche alla tua funzione, può capitare a piu cifree decimali, non massimo due.

    Possiamo ragionare su questa funzione che ti ho scritto sopra, perchè la tua non l'ho capita proprio!!
    Te l'ho detto sono un pò tardo in JS...

    Come posso fare per fargli fare bene i calcoli anche se mostro il valore con la virgola e non con il punto?

    Grazie mille per la pazienza!

  5. #5
    se mostri la virgola devi poi effettuare un replace della virgola con il punto, per fare i calcoli e poi prima di riproporre il risultato modificare nuovamente il punto con la virgola.

    se fai una ricerca trovi sicurmante quello che ti serve.


    al posto di
    var q = parseFloat(ff.quantita1.value);

    scrivi
    var q =document.getElementById ("quantita1").value

    fa esattamente la stessa cosa ma è più corretto dal punto di vista sintattico.
    devi ricordarti di definire il campo quantita1 non solo con il nome ma anche con l'ID
    <input type="text" id="quantita1" name="quantita1" value="">



    ciao

  6. #6
    Immagno dovessi usare un replace, in ASP non avrei avuto problemi, ma sto JS...
    Ho fatto così, ma non cambia niente...

    codice:
    function calcola1(){
      var ff = document.form1;
      var q = parseFloat(ff.quantita1.value);
      var imp = parseFloat(ff.prezzo_uni1.value);
      imp = imp.replace(",", ".") 
      var aliquota = parseFloat(ff.iva1.value);
      var iva = imp * (aliquota/100);
      var tot = (imp + iva)*q;
    
      ff.totale1.value = tot;
      
    }
    Facendo così non dovrebbe recuperare il valore a video che è con la virgola, fare il replace, fare tutti i calcoli e quindi mostrarmi il risultato nel totale?

  7. #7
    ho cambiato ancora, ma non funziona neanche così:

    codice:
    imp = imp.replace(/,/,".")

  8. #8
    Allora, il replace l'ho fatto in ASP per poi passare il valore già con il punto e non con la virgola.
    Funziona tutto, ma succede una cosa strana.
    La seconda funzione uguale a alla prima funzionante, mi restituisce come Totale "NaN"!! E non capisco perchè visto che le due funzioni sono uguali!!!

    PRIMA FUNZIONE
    codice:
    function calcola1(){
      var ff = document.form1;
      var q = parseFloat(ff.quantita1.value);
      var imp = ff.prezzo_uni1.value;
      var aliquota = parseFloat(ff.iva1.value);
      var iva = imp * (aliquota/100);
      var tot = (imp + iva)*q;
    
      ff.totale1.value = parseFloat(tot);
      
    }
    SECONDA FUNZIONE
    codice:
    function calcola2(){
      var ff = document.form1;
      var q = parseFloat(ff.quantita2.value);
      var imp = ff.prezzo_uni2.value;
      var aliquota = parseFloat(ff.iva2.value);
      var iva = imp * (aliquota/100);
      var tot = (imp + iva)*q;
    
      ff.totale2.value = parseFloat(tot);
      
    }
    In pratica la seconda funzione da un valore corretto solo se non è presente il punto, altrimenti mi dice NaN!!!

    Ragazzi sapete dirmi come mai?
    Grazie mille!

  9. #9
    E VAI HO RISOLTO ANCORA!!!

    mancava parseFloat al valore imponibile...

    sto diventando davvero bravo!!! :maLOL: :maLOL:

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.