Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Problema con decimali

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630

    Problema con decimali

    Ho questo script, se la variabile SCONTATO è = 150,5 non visualizzo nel div il risultato, mentre se SCONTATO è = 150, tutto funziona correttamente, dove sbaglio?
    Grazie
    G.
    codice:
    <script language="javascript" type="text/javascript">
             window.onkeypress = setInterval('changeTotale()',100);
             function changeTotale(){  
             var somma = <%=scontato%>; 
             var listSelect = document.getElementsByName("supplemento");
             
             for(var i=0; i<listSelect.length; i++){
             curSelect = listSelect[i]; 
             somma += Number(curSelect.options[curSelect.selectedIndex].value);
             var importol = somma.toFixed(2);    
             var importos = importol.replace('.',','); 
               }             
             document.getElementById('risultato').innerHTML = "€ " +formatCurrency(importol);
             document.getElementById('risultatob').value = somma;
             }
             function formatCurrency(number){
             var numberStr = parseFloat(number).toFixed(2).toString();
             var numFormatDec = numberStr.slice(-2); 
             numberStr = numberStr.substring(0, numberStr.length-3); 
             var numFormat = new Array;
             while (numberStr.length > 3) {
             numFormat.unshift(numberStr.slice(-3));
             numberStr = numberStr.substring(0, numberStr.length-3);
             }
             numFormat.unshift(numberStr);
             return numFormat.join('.')+','+numFormatDec; 
    }
    </script>
    
    <div style="text-align:center;font-size:30px" id="risultato">

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630
    nessun aiuto?

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    in javascript il separatore dei decimali è il punto, 150,5 non è un numero valido quindi va in errore quando tenti di convertirlo Number(....)

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630
    e quindi puoi darmi un suggerimento come risolvere?
    Grazie

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    ti basta sostituire la virgola con il punto, puoi usare una regexp

    codice:
    selNum = curSelect.options[curSelect.selectedIndex].value;
    selNum = selNum.replace(/,/g, '.');
    somma += Number(selNum);

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630
    Ho provato come mi hai indicato ma nulla.
    codice:
    <script language="javascript" type="text/javascript">
             window.onkeypress = setInterval('changeTotale()',100);
             function changeTotale(){  
             var somma = <%=scontato%>; 
             var listSelect = document.getElementsByName("supplemento");
             
             for(var i=0; i<listSelect.length; i++){
             curSelect = listSelect[i]; 
    
         selNum = curSelect.options[curSelect.selectedIndex].value;
         selNum = selNum.replace(/,/g, '.');
         somma += Number(selNum);
    
             var importol = somma.toFixed(2);    
             var importos = importol.replace('.',','); 
               }             
             document.getElementById('risultato').innerHTML = "€ " +formatCurrency(importol);
             document.getElementById('risultatob').value = somma;
             }
             function formatCurrency(number){
             var numberStr = parseFloat(number).toFixed(2).toString();
             var numFormatDec = numberStr.slice(-2); 
             numberStr = numberStr.substring(0, numberStr.length-3); 
             var numFormat = new Array;
             while (numberStr.length > 3) {
             numFormat.unshift(numberStr.slice(-3));
             numberStr = numberStr.substring(0, numberStr.length-3);
             }
             numFormat.unshift(numberStr);
             return numFormat.join('.')+','+numFormatDec; 
    }
    </script>
    
    <div style="text-align:center;font-size:30px" id="risultato">
    Grazie
    G.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    sposta l' istruzione:

    var importol = somma.toFixed(2);

    fuori dal ciclo for

    questa var importos = importol.replace('.',','); invece non serve, il replace lo fai già nel metodo formatCurrency

    Ultima modifica di Vindav; 09-11-2015 a 15:45

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630
    Scusami ma sia spostando dal for o lasciandolo non pubblica a video nulla se la variabile SCONTATO è tipo 111,6 (se c'è la virgola e l'altro decimale in questo caso il 6), mentre tutto corretto se la SCONTATO ha come valore esempio 120, senza decimale.

  9. #9
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, il problema sta qui:
    codice:
    var somma = <%=scontato%>;
    Da ASP non puoi passare quel valore (150,5) come se fosse un numero, perché JavaScript non può interpretarlo come tale.

    Metti quel valore tra apici, in modo che diventi una stringa testuale per JavaScript, quindi fai il dovuto replace tra virgola e punto, e converti il tutto come numero.

    codice:
    var somma = Number('<%=scontato%>'.replace(',','.'));
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630
    Grande KILLERWORM, si il problema era proprio quello, comunque grazie anche a Vindav per l'aiuto.

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.