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

    errore sulla formattazione in euro di una moltiplicazione tra campi

    Salve ragazzi,

    ho la necessità di eseguire una moltiplicazione tra due campi.

    Ho trovato la funzione di moltiplicazione però il se io faccio 1*2 mi da giustamente 2 invece io vorrei che fosse 2.00 visto che il risultato si riferisce ad un'importo in euro da inserire in access.

    Queto è quello che ho fatto:
    codice:
    <script>
    function format(number, dec) {
        
        
        while (number.length < dec + 1)  
            number = "0" + number;
        
        var formatted = "";
        var decimal  = new RegExp ("(\\d*?)(\\d{" + dec +"})$");
        var fixed    = new RegExp ("(\\d*?)(\\d{3})$");
         
        split = decimal.exec(number);
        
        if (split[2].length > 0) {
            formatted = "," + split[2];
        }
        number = split[1];
        
        while (number.length > 2) {
          split = fixed.exec(number);
          formatted = "." + split[2] + formatted;
          number = split[1];
        }
       
        formatted = number + formatted;
        return formatted;
    
    }
    </script>
    <script type="text/javascript">
    <!-- Begin
    function startCalc(){
      interval = setInterval("calc()",1);
    }
    function calc(){
      one = document.form1.confVendute.value;
      two = document.form1.prezzoVendita.value; 
      document.form1.totale.value = format( (one * 1) * (two * 1), 2) ;
      }
    function stopCalc(){
      clearInterval(interval);
    }
    //  End -->
    </script>
    Questi invece sono i campi interessati del form:
    codice:
    <td align="left" class="testoDati">
                                    <input name="confVendute" type="text" id="confVendute" value="1" size="5" onFocus="startCalc();" onBlur="stopCalc();"/></td>
                                </tr>
                                <tr>
                                  <td colspan="2" align="left" class="testoDati">[img]immagini/null.gif[/img]</td>
                                  </tr>
                                <tr>
                                  <td align="left" class="testoDati">Prezzo vendita</td>
                                  <td align="left" class="testoDati"><input name="prezzoVendita" type="text" class="testoDati" id="prezzoVendita" onFocus="startCalc();" onBlur="stopCalc()"/></td>
                                </tr>
                                <tr>
                                  <td colspan="2" align="left" class="testoDati">[img]immagini/null.gif[/img]</td>
                                  </tr>
                                <tr>
                                  <td align="left" class="testoDati">Sub totale </td>
                                  <td align="left" class="testoDati"><input name="totale" type="text" class="testoDati" id="totale"
    /></td>
    Senza inserire il codice in rosso l'operazione viene eseguita ma ho quel problema.
    Se invece faccio 1*1.55 non ho nessun problema mi restituisce 1.55.
    Dove sbaglio?
    <a href="http://www.robertodidonato.it" target="_blank">Roberto Di Donato</a>

  2. #2
    Ti passo una funzione che ho fatto tempo fa: vedi se può fare al caso tuo!
    Codice PHP:
    // funzione formattaNumero
    // parametri:
    // nStr: il numero da formattare, anche decimale
    // COMMA: l'identificatore di decimale (di solito il punto)
    //        Se si passa alla funzione nStr come numero, va da
    //        se' che il punto decimale è il punto!
    //        ma se si passa una stringa, potrebbe anche essere la virgola!
    // MAX_DEC: numero di decimali da far vedere, SEMPRE
    //        Es: se posto a 2, ci saranno sempre 2 decimali, 
    //        anche per numeri interi
     
    function formattaNumero(nStr,COMMA,MAX_DEC){
      
    nStr += '';
      
    nStr.split(COMMA);
      
    x1 x[0];
      
    x2 x.length COMMA x[1] : COMMA;
      while(
    x1.charAt(0) == '0') {
          
    x1 x1.substring(1,x1.length);
      }
      if(
    x1.length == 0x1 "0";
      if(
    x2 != '' && x2.length MAX_DEC 1)
        
    x2x2.substring(0,MAX_DEC+1)
      while(
    x2 != '' && x2.length MAX_DEC 1)
        
    x2 x2 '0';
        
      return 
    x1 x2;
    }
    alert(formattaNumero(150,'.',2)); 
    HTH
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

  3. #3
    Ho provato ad adattare la tua funzione in questo modo ma non cambia nulla:

    codice:
    <script type="text/javascript">
    <!-- Begin
    function startCalc(){
      interval = setInterval("calc()",1);
    }
    function calc(){
      conf = document.form1.confVendute.value;
      prezzo = document.form1.prezzoVendita.value;
      document.form1.totale.value = (conf * 1) * (prezzo * 1);
     // somma = document.form1.totale.value;
    }
    function formattaNumero(nStr,COMMA,MAX_DEC){ 
      document.form1.totale.value = (conf * 1) * (prezzo * 1);
      x = document.form1.totale.value.split(COMMA); 
      x1 = x[0]; 
      x2 = x.length > 1 ? COMMA + x[1] : COMMA; 
      while(x1.charAt(0) == '0') { 
          x1 = x1.substring(1,x1.length); 
      } 
      if(x1.length == 0) x1 = "0"; 
      if(x2 != '' && x2.length > MAX_DEC + 1) 
        x2= x2.substring(0,MAX_DEC+1) 
      while(x2 != '' && x2.length < MAX_DEC + 1) 
        x2 = x2 + '0'; 
         
      return x1 + x2; 
    } 
    function stopCalc(){
      clearInterval(interval);
    }
    //  End -->
    </script>
    Praticamente è come prima, mi fa loperazione corretta ma gli zeri subito dopo la virgola non li vede.

    :master:
    <a href="http://www.robertodidonato.it" target="_blank">Roberto Di Donato</a>

  4. #4
    Allora ho fatto un piccolo passo avanti che mi va bene in parte
    Questo è il codice:
    codice:
    <script type="text/javascript">
    <!-- Begin
    function startCalc(){
      interval = setInterval("calc()",1);
    }
    function calc(){
      one = document.form1.confVendute.value;
      two = document.form1.prezzoVendita.value; 
      document.form1.totale.value = (one * 1) * (two * 1);
    }
    function stopCalc(){
      clearInterval(interval);
    }
    //  End -->
    </script>
    <SCRIPT LANGUAGE="JavaScript">
    
    
    
    
    
    
    <!-- Begin
    function formatCurrency(num) {
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num))
    num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    cents = num%100;
    num = Math.floor(num/100).toString();
    if(cents<10)
    cents = "0" + cents;
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
    num = num.substring(0,num.length-(4*i+3))+','+
    num.substring(num.length-(4*i+3));
    return (num + '.' + cents);
    }
    //  End -->
    </script>
    Questi invece sono i campi interessati.
    codice:
    <td align="left" class="testoDati">
                                    <input name="confVendute" type="text" id="confVendute" value="1" size="5" onFocus="startCalc();" onBlur="stopCalc();"/></td>
                                </tr>
                                <tr>
                                  <td colspan="2" align="left" class="testoDati">[img]immagini/null.gif[/img]</td>
                                  </tr>
                                <tr>
                                  <td align="left" class="testoDati">Prezzo vendita</td>
                                  <td align="left" class="testoDati"><input name="prezzoVendita" type="text" class="testoDati" id="prezzoVendita" onFocus="startCalc();" onBlur="stopCalc();"/></td>
                                </tr>
                                <tr>
                                  <td colspan="2" align="left" class="testoDati">[img]immagini/null.gif[/img]</td>
                                  </tr>
                                <tr>
                                  <td align="left" class="testoDati">Sub totale </td>
                                  <td align="left" class="testoDati"><input name="totale" type="text" class="testoDati" id="totale" onBlur="this.form.totale.value=formatCurrency(this.form.totale.value)"/></td>
    Il fatto è che ora mi funziona tutto correttamente solo se uso il tasto tab.
    Nel senso che con quantità uguale a "2" e importo unitario scritto di "5.00" oppure solo "5" e lui come totale mi da "10".
    Poi premendo il tasto "tab" "10" diventa "10.00".

    E' possibile tramite lo script che ho postato che automaticamente mi converta 10 in 10.00 senza essere costretto ad usare il tasto "tab" per forza?

    Ciao e buona giornata a tutti.
    <a href="http://www.robertodidonato.it" target="_blank">Roberto Di Donato</a>

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.