Visualizzazione dei risultati da 1 a 7 su 7

Discussione: sommare 2 numeri

  1. #1

    sommare 2 numeri

    Salve a tutti,in un form oh 2 campi di testo con dei valori numerici all'interno, e in un terzo campo vorrei mettere la somma, in questo modo
    (numero1*numero2)+numero3
    e fin quì nulla di complicato, i numeri sono con 2 decimali e utilizzo il parseFloat. Ma andando a modificare un numero non mi somma più con due decimali, ma con 13, e il numero intero non corrisponde nemmeno al reale. Come posso evitare questo? Ho bisogno di cifre abbastenza precise.

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Se cerchi (bottone in alto a dx) nel forum trovi vari algoritmi di arrotondamento.

    Se hai problemi, posta nuovamente chiarendo bene i termini (mi pare che nella tua descrizione ci siano delle incongruenze)
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  4. #4
    Si in effetti devo dire che non sono stato molto chiaro, Ho cercato nel forum, ma non sono riuscito risolvere, posto il codice.
    codice:
    <script language="javascript1.2" type="text/javascript">
    //funzione che imposta il prezzo aggiuntivo per il condizionatore
    function cond(){
    	var oldValue=document.servizi.condTotal.value;
    	if(oldValue==''){
    		var preCond=document.servizi.preCond.value;
    		var notti=document.servizi.nottiCond.value;
    		document.servizi.condTotal.value=preCond * notti;
    		document.servizi.totale.value=parseFloat(document.servizi.totale.value) + parseFloat(document.servizi.condTotal.value);
    	}
    	else {
    		document.servizi.totale.value=parseFloat(document.servizi.totale.value) - parseFloat(document.servizi.condTotal.value);
    		document.servizi.condTotal.value='';
    	}
    }
    
    //funzione che imposta il prezzso aggiuntivo per il parcheggio dell'auto
    function macchina(){
    	var oldValue=document.servizi.autoTotal.value;
    	if(oldValue==''){
    		var preAuto=document.servizi.preAuto.value;
    		var notti=document.servizi.nottiAuto.value;
    		document.servizi.autoTotal.value=parseFloat(preAuto) * parseFloat(notti);
    		document.servizi.totale.value=parseFloat(document.servizi.totale.value) + parseFloat(document.servizi.autoTotal.value);
    	}
    	else {
    		document.servizi.totale.value=parseFloat(document.servizi.totale.value) - parseFloat(document.servizi.autoTotal.value);
    		document.servizi.autoTotal.value='';
    	}
    }
    
    //funzione che imposta il prezzo aggiuntivo per l'energia elettrica
    function energ(){
    	var oldValue=document.servizi.energTotal.value;
    	if(oldValue==''){
    		var preEnerg=document.servizi.preEnerg.value;
    		var notti=document.servizi.nottiEnerg.value;
    		document.servizi.energTotal.value=preEnerg * notti;
    		document.servizi.totale.value=parseFloat(document.servizi.totale.value) + parseFloat(document.servizi.energTotal.value);
    	}
    	else {
    		document.servizi.totale.value=parseFloat(document.servizi.totale.value) - parseFloat(document.servizi.energTotal.value);
    		document.servizi.energTotal.value='';
    	}
    }
    </script>
    I campi di testo da dove prelevo i valori vengono riempiti da php, questo sotto è il codice generato da php con i valori
    codice:
    <div id="contenuto"><form name="servizi" action="" method="post">
    	<div id="stampa">Stampa</div> <div id="checkout"></div><div id="fattura"></div>
    	<div id="newUser">Inserisci utenti</div>
    	<div class="titolo">Dati personali</div><div id="elencoUser">Utenti annessi</div>
    	<div class="tabella">
    	  <table width="100%"  border="0" cellpadding="2" cellspacing="0" bordercolor="#FFFFFF" bgcolor="#cccccc">
            <tr align="left" valign="top">
              <td width="19%" class="sfondo">Nome
    
              <input name="nome" type="text" disabled id="nome" value="Q">            </td>
              <td width="29%" class="sfondo">Cognome
    
              <input name="cognome" type="text" disabled id="cognome" value="Q"></td>
              <td width="19%" class="sfondo">Arrivo
    
              <input name="arrivo" type="text" disabled id="arrivo" value="04-20-2004"></td>
              <td width="33%" align="left" class="sfondo">Partenza
    
              <input name="partenza" type="text" disabled id="partenza" value="04-25-2004">            </td>
            </tr>
          </table>
    	</div>
    	<div class="tabella">
    	<table width="100%"  border="0" cellpadding="2" cellspacing="2">
      <tr align="left" valign="top">
        <td class="sfondo">N&deg;
          <input name="numPrenotazione" type="text" disabled id="numPrenotazione" value="888888"></td>
        <td class="sfondo">Prezzo
    <input type="text" name="prezzo" value="30.17" disabled></td>
        <td class="sfondo">Totale Euro
    <input name="prezzoTotale" type="text" disabled value="150.85"></td>
        <td align="right" class="sfondo">Campo N&deg;
    
          <input name="numCamera" type="text" disabled id="numCamera" value="111"></td>
      </tr>
    </table>
    </div>
    <div class="tabella">
    
      <table width="100%"  border="1" cellspacing="2" cellpadding="2">
        <tr align="left" valign="top">
          <td colspan="2">SERVIZI</td>
          <td width="22%" align="center">PREZZO</td>
          <td width="23%" align="center">GIORNI</td>
          <td width="23%" align="center">TOTALE</td>
          </tr>
        <tr align="left" valign="top">
          <td width="29%">Condizionatore</td>
          <td width="3%" align="center" valign="middle"><input type="checkbox" name="condizionatore" value="1" onClick="cond()"></td>
          <td align="center">12.33<input type="hidden" name="preCond" value="12.33"></td>
          <td align="center"><input type="text" name="nottiCond" value="5"></td>
          <td align="center"><input name="condTotal" type="text" disabled></td>
          </tr>
        <tr align="left" valign="top">
          <td>Altra piazzola auto </td>
          <td align="center" valign="middle"><input type="checkbox" name="auto" value="1" onClick="macchina()"></td>
          <td align="center">20.00<input type="hidden" name="preAuto" value="20.00" disabled></td>
          <td align="center"><input name="nottiAuto" type="text" value="5"></td>
          <td align="center">        <input name="autoTotal" type="text" disabled></td>
        </tr>
        <tr align="left" valign="top">
          <td>Energia elettrica </td>
          <td align="center" valign="middle"><input type="checkbox" name="energia" value="1" onClick="energ()"></td>
          <td align="center">56.68<input type="hidden" name="preEnerg" value="56.68"></td>
          <td align="center"><input type="text" name="nottiEnerg" value="5"></td>
          <td align="center"><input type="text" name="energTotal" disabled></td>
        </tr>
        <tr align="left" valign="top">
          <td colspan="5"></td>
          </tr>
        <tr align="left" valign="top">
          <td colspan="3"></td>
          <td align="right"><input type="submit" name="inserisci" value="Inserisci" id="inserisci2"></td>
          <td align="center"><input name="totale" type="text" disabled value="150.85"></td>
        </tr>
        <tr align="left" valign="top">
          <td colspan="5"></td>
          </tr>
      </table>
    </div></form>

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Esempio di arrotondamento per due cifre decimali:

    var uno = parseFloat(document.NOMEFORM.NOEMCAMPO.value);
    var due = parseFloat(document.NOMEFORM.NOEMCAMPO.value);
    var ris = uno * due;

    ris = Math.round(ris*100) / 100;
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  6. #6
    Originariamente inviato da Mich_
    Esempio di arrotondamento per due cifre decimali:

    var uno = parseFloat(document.NOMEFORM.NOEMCAMPO.value);
    var due = parseFloat(document.NOMEFORM.NOEMCAMPO.value);
    var ris = uno * due;

    ris = Math.round(ris*100) / 100;
    Fino a questo punto ci sono arrivato, ma ora quando vado a sommare ris con una'altro numero dovrei avere il risultato di 83.73, invece da il numero 83.72999999999999, arrotondo pure questo, ma perchè non restituisce il numero preciso?
    Sono un pò lo sto studiando solo ora

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    L'arrotondamento va fatto una volta solo alla fine dei calcoli prima di visualizzare.

    Il problema e` come i computer gestiscono i numeri reali (a virgola mobile).

    Credo sia citato tra i link utili di questo forum una trattazione piu` completa che avevo fatto qualche tempo fa.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

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.