none
somar campos dor formumlário da erro RRS feed

  • Pergunta

  • Pessoal, tenho um script que formata moeda real... o que acontece é que se digito 1.000,00 ele não entende e vira 1,00

    Tipo:
    valor unitário: 100,00 X 2
    total: 200,00

     

    ok, mas...se faço.



    Valor unitário: 1.000,00 X 2
    Total: 2,00

    Por que? Deveria ser 2.000,00 também abaixo...

    O problema aí é quando entra o ponto, . , da problema, se fosse direto não teria problema no cálculo. Tipo: 1.000,00 não funciona para os cálculos, só funciona 1000,00. Por que?

    Se quiser testar na prática vá nesse formulário http://www.ideiabiz.com/ok.htm . Pode ver o HTML, código fonte, lá também!

     

    La no campo valor digitado em R$ 1 se digito dezena ou centena ao lado da resultado normal, no valor total 1, mas se coloco casa do mil, gera ponto (.) e aí os calculos não são feitos certos... O script não faz cáculos com pontos?

    Obrigado!

    Marcelo

    sábado, 29 de novembro de 2008 11:58

Respostas

  • Use as duas funções abaixo e veja se funciona:

    function float2moeda(num){
       x = 0;
       if (num<0){
          num = Math.abs(num);
          x = 1;
       }
       if (isNaN(num)) num = "0";
       
       cents = Math.floor((num*100+0.5)%100);
       num = Math.floor((num*100+0.5)/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));
       ret = num + ',' + cents;
       if (x == 1) ret = ' - ' + ret;return ret;
    }
     
    function soma(){
        var campo3 = document.getElementById('campo3');
        var campo2 = document.getElementById('campo2');
        var campo4 = document.getElementById('campo4');
        var campo5 = document.getElementById('campo5');
    var campo6 = document.getElementById('campo6');
    var c2, c4, soma, sub3, sub5;
            
    c2 = campo2.value;
    c2 = c2.replace(/\./g,"");
    c2 = c2.replace(/\,/g,".");
    c4 = campo4.value;
    c4 = c4.replace(/\./g,"");
    c4 = c4.replace(/\,/g,".");
    sub3 = 0;
    sub5 = 0;
    sub3 = parseFloat(c2) * 2;
    sub5 = parseFloat(c4) * 2;
    campo3.value = float2moeda(sub3);
    campo5.value = float2moeda(sub5);
    soma = sub3 + sub5;
    campo6.value = float2moeda(soma);
    }


    Abraço

    Estevam
    terça-feira, 2 de dezembro de 2008 16:40

Todas as Respostas

  • Marcelo, o separador decimal do ASP é o ponto por isto ele converte desta forma, neste caso creio que o melhor a fazer é dar um Replace no valor

    Replace(var_valor,".","")
    Replace(var_valor,",",".")

    Abraço

    Estevam
    segunda-feira, 1 de dezembro de 2008 11:17
  • Onde exatamento faria esse replace? tentei algo mas dar erro...

     

        campo3.value = parseFloat(campo2.value.replace(',','.')) * 2

        campo3.value =  Replace((campo3.value,".","");
            campo3.value =  Replace((campo3.value,",",".");

    segunda-feira, 1 de dezembro de 2008 17:16
  • Marcelo, pelo código que você passou, você esta tentando fazer pelo javascript, e o replace do javascript é difierente, trabalha com regexp, veja:


    no seu caso, acho que funcionaria assim, faz um teste:

    campo3.value = campo3.value.replace(/./g,"");

    campo3.value = campo3.value.replace(/\,/g,".");


    Abraço


    Estevam

    segunda-feira, 1 de dezembro de 2008 17:44
  • Estevam,

     

    Infelizmente não estou conseguindo entender essa lógica, no mais fiz o que você falou, pode ver o codigo fonte da página http://www.ideiabiz.com/ok.htm e veja que como você falou deu problemas...

     

    A questão que você me falou é que esse replace que me passou já tem uma função que já faz isso lá em cima do código:

     

    function mreais(v){
        v=v.replace(/\D/g,"")                        //Remove tudo o que não é dígito
        v=v.replace(/(\d{2})$/,",$1")             //Coloca a virgula
        v=v.replace(/(\d+)(\d{3},\d{2})$/g,"$1.$2")     //Coloca o primeiro ponto
        return v

    Não?

    segunda-feira, 1 de dezembro de 2008 21:22
  • Marcelo, refiz a sua função "soma" troque ela no seu código e faça um teste.

    function soma(){
        var campo3 = document.getElementById('campo3');
        var campo2 = document.getElementById('campo2');
        var campo4 = document.getElementById('campo4');
        var campo5 = document.getElementById('campo5');
    var campo6 = document.getElementById('campo6');
    var c2, c4, soma, sub3, sub5;
            
    c2 = campo2.value;
    c2 = c2.replace(/\./g,"");
    c2 = c2.replace(/\,/g,".");
    c4 = campo4.value;
    c4 = c4.replace(/\./g,"");
    c4 = c4.replace(/\,/g,".");
    sub3 = 0;
    sub5 = 0;
    sub3 = parseFloat(c2) * 2;
    sub5 = parseFloat(c4) * 2;
    campo3.value = sub3;
    campo5.value = sub5;
    soma = sub3 + sub5;
    campo6.value = soma;
    }

    Abraço

    Esteavm
    terça-feira, 2 de dezembro de 2008 12:37
  • Certo!

     

    Mas a questão é os campos resultados, chamado valor total 1 e valor total 2, pois eles não formatam iguais como os outros com pontos e virgulas, eles não podem por causa da soma? veja http://www.ideiabiz.com/ok.htm

    terça-feira, 2 de dezembro de 2008 16:13
  • Pior que surgiu outro problema... fui jogar ele em um loop e não roda mais nada!

     

    Loop:

     

     function soma<%=i%>(){
        var valortotalitem<%=i%> = document.getElementById('valortotalitem<%=i%>');
        var valor<%=i%> = document.getElementById('valor<%=i%>');
        var quantidadev<%=i%> = document.form.unidades<%=i%>.value;
       var campo6 = document.getElementById('campo6');
      
    var c2, c4, soma, sub3, sub5;
           
    c2 = valor<%=i%>.value;
    c2 = c2.replace(/\./g,"");
    c2 = c2.replace(/\,/g,".");
    sub3 = 0;
    sub5 = 0;
    sub3 = parseFloat(c2) * quantidadev<%=i%>;
    valortotalitem<%=i%>.value = sub3;
    soma = sub3
    campo6.value = soma;
       
    window.onload=soma1()


    function soma1<%=i%>(){

    var ValorItem = new Array()
    var ValorTotal = 0

    for (i=1;i<=<%=session("qtitem")%>;i++) {
    ValorItemIdea = parseFloat(document.getElementById("valortotalitem" + i).value.replace(',','.'));
    ValorTotal += ValorItemIdea
    }
    var campo6 = document.getElementById('campo6');
    campo6.value = ValorTotal
    campo6.value = fmtMoney(campo6.value);
    }
         
     
                          

                            </script>
                              <tr>
                              <td width="100%" colspan="2" height="16">
                              <font face="Verdana" style="font-size: 8pt" color="#2A2A2A">Valor
                              unitário:
                              </font>
                          <input type="text" name="valor<%=i%>" id="valor<%=i%>" onkeypress="mascara(this,mreais)" onkeyup="soma<%=i%>();" size="27" style="font-family: Verdana; font-size: 10 px; color: #3A5278; border: 1px solid #3A5278; background-color[:#]EEEEEE" value="<%=request.form("valor"&i)%>"></td>
                            </tr>
                            <tr>
                              <td width="100%" colspan="2" height="16">
                              <font face="Verdana" style="font-size: 8pt" color="#2A2A2A">Valor
                              total do item <%=i%>:
                              </font>
                          <input type="text" readonly name="valortotalitem<%=i%>" id="valortotalitem<%=i%>" onkeyup="soma1<%=i%>();" size="19" style="font-family: Verdana; font-size: 10 px; color: #3A5278; border: 1px solid #3A5278; background-color[:#]EEEEEE" value="<%=request.form("valortotalitem"&i)%>" size="20"></td>
                            </tr>
                          </table>

     

    Veja, libere o POP UP do internet explorer e veja http://www.ideiabiz.com/eletrofone/inserirprodutosok.asp na seção Item1, digite 1 no campo que ele solicitar...e la vai ter unidades e vai ter Valor unitário e Valor total do item 1 é nisso que tento trabalhar....

    terça-feira, 2 de dezembro de 2008 16:30
  • Use as duas funções abaixo e veja se funciona:

    function float2moeda(num){
       x = 0;
       if (num<0){
          num = Math.abs(num);
          x = 1;
       }
       if (isNaN(num)) num = "0";
       
       cents = Math.floor((num*100+0.5)%100);
       num = Math.floor((num*100+0.5)/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));
       ret = num + ',' + cents;
       if (x == 1) ret = ' - ' + ret;return ret;
    }
     
    function soma(){
        var campo3 = document.getElementById('campo3');
        var campo2 = document.getElementById('campo2');
        var campo4 = document.getElementById('campo4');
        var campo5 = document.getElementById('campo5');
    var campo6 = document.getElementById('campo6');
    var c2, c4, soma, sub3, sub5;
            
    c2 = campo2.value;
    c2 = c2.replace(/\./g,"");
    c2 = c2.replace(/\,/g,".");
    c4 = campo4.value;
    c4 = c4.replace(/\./g,"");
    c4 = c4.replace(/\,/g,".");
    sub3 = 0;
    sub5 = 0;
    sub3 = parseFloat(c2) * 2;
    sub5 = parseFloat(c4) * 2;
    campo3.value = float2moeda(sub3);
    campo5.value = float2moeda(sub5);
    soma = sub3 + sub5;
    campo6.value = float2moeda(soma);
    }


    Abraço

    Estevam
    terça-feira, 2 de dezembro de 2008 16:40
  • Seu codigo funciona, mas não funciona quando eu coloco ele no meu sistema real que tem um loop, no site que te falei...

     

     function soma<%=i%>(){
         var quantidadev<%=i%> = document.form.unidades<%=i%>.value;
        var valor<%=i%> = document.getElementById('valor<%=i%>');
            var valortotalitem<%=i%> = document.getElementById('valortotalitem<%=i%>');

       var campo6 = document.getElementById('campo6');
      
    var c2, c4, soma, sub3, sub5;
           
    c2 = valor<%=i%>.value;
    c2 = c2.replace(/\./g,"");
    c2 = c2.replace(/\,/g,".");
    sub3 = 0;
    sub3 = parseFloat(c2) * quantidadev<%=i%>;
    valortotalitem<%=i%>.value = sub3;
    soma = sub3
    campo6.value = soma;
       
    window.onload=soma1()


    function soma1<%=i%>(){

    var ValorItem = new Array()
    var ValorTotal = 0

    for (i=1;i<=<%=session("qtitem")%>;i++) {
    ValorItemIdea = parseFloat(document.getElementById("valortotalitem" + i).value.replace(',','.'));
    ValorTotal += ValorItemIdea
    }
    var campo6 = document.getElementById('campo6');
    campo6.value = ValorTotal
    campo6.value = fmtMoney(campo6.value);
    }
         
     
                          

                            </script>
                              <tr>
                              <td width="100%" colspan="2" height="16">
                              <font face="Verdana" style="font-size: 8pt" color="#2A2A2A">Valor
                              unitário:
                              </font>
                          <input type="text" name="valor<%=i%>" id="valor<%=i%>" onkeypress="mascara(this,mreais)" onkeyup="soma<%=i%>();" size="27" style="font-family: Verdana; font-size: 10 px; color: #3A5278; border: 1px solid #3A5278; background-color[:#]EEEEEE" value="<%=request.form("valor"&i)%>"></td>
                            </tr>
                            <tr>
                              <td width="100%" colspan="2" height="16">
                              <font face="Verdana" style="font-size: 8pt" color="#2A2A2A">Valor
                              total do item <%=i%>:
                              </font>
                          <input type="text" readonly name="valortotalitem<%=i%>" id="valortotalitem<%=i%>" onkeyup="soma1<%=i%>();" size="19" style="font-family: Verdana; font-size: 10 px; color: #3A5278; border: 1px solid #3A5278; background-color[:#]EEEEEE" value="<%=request.form("valortotalitem"&i)%>" size="20"></td>
                            </tr>
                          </table>
                          </td>
                          <td width="52%" valign="top">
                          <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#DFDFDF" width="100%" id="AutoNumber15">
                            <tr>

    terça-feira, 2 de dezembro de 2008 16:43
  • Olá Estevam, funcionou corretamente, está rodando certo agora!

     

    Parabéns! Você foi muito bom na resolução do javascript!

     

    Parabéns mesmo!

     

    Obrigado também!

    terça-feira, 2 de dezembro de 2008 17:11