Usuário com melhor resposta
somar campos dor formumlário da erro

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,00ok, 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
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çoEstevam
Todas as Respostas
-
-
-
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
-
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 vNão?
-
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çoEsteavm
-
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
-
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 = 0for (i=1;i<=<%=session("qtitem")%>;i++) {
ValorItem= parseFloat(document.getElementById("valortotalitem" + i).value.replace(',','.'));
ValorTotal += ValorItem
}
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-colorEEEEEE" 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-colorEEEEEE" 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....
-
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çoEstevam
-
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 = 0for (i=1;i<=<%=session("qtitem")%>;i++) {
ValorItem= parseFloat(document.getElementById("valortotalitem" + i).value.replace(',','.'));
ValorTotal += ValorItem
}
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-colorEEEEEE" 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-colorEEEEEE" 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> -