Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Somar campos em moedas


marvi

Pergunta

Pessoal, estou tentando obter um script que multiplique os valores que for digitado em um campo do formulário em R$ (real)

Encontrei esse, mas não faz cálculos em moedas:

<script language="javascript">
function Calcula(){
var Parametro1=document.frm.EditValor.value;
var Parametro2=document.frm.EditTaxa.value;
var Soma=((parseFloat(Parametro1))*(parseFloat(Parametro2))); 
document.frm.EditValorTotal.value=Soma;
}
</script>

<body>
<form name="frm">
<input type="text" name="EditValor" onKeyUp="Calcula()" size="20" style="border: 1px solid #808080"><BR>
<input type="text" name="EditTaxa" onKeyUp="Calcula()" size="20" style="border: 1px solid #808080"><BR><BR>
total:<input type="text" name="EditValorTotal" size="20" style="border: 1px solid #FFFFFF"><BR><BR>

</form>

Alguém sabe um script que possa fazer multiplicação em moedas? Tipo: 12,80

Obrigado!

Marcelo

Link para o comentário
Compartilhar em outros sites

17 respostass a esta questão

Posts Recomendados

  • 0

Tipo, no campo a pessoa digita 12,80 e no outro campo digita um numero para multiplicar, por exemplo 2 que dar o total de 25,6

Exemplo:

Campo 1: 2

Campo 2: 12,80

Total: 25,6 (pois 12,80 X 2 é 25,6)

Igual o que esse script que mostrei acima faz... mas que ele considere as cadas decimais, algo assim para poder multiplicar tudo...entendeu?

Editado por marvi
Link para o comentário
Compartilhar em outros sites

  • 0

Tenta algo como:

var Soma= parseFloat(eval(Parametro1 + "*" + Parametro2))
Ou, apenas:
var Parametro1=eval(document.frm.EditValor.value);
var Parametro2=eval(document.frm.EditTaxa.value);
var Soma= Parametro1 * Parametro2
document.frm.EditValorTotal.value=Soma;

Qualquer coisa, posta aí !

Link para o comentário
Compartilhar em outros sites

  • 0

Resolvir, segue uma solução com formatação, máscara e tudo:

<script type="text/javascript"> 
addEvent = function(o, e, f, s) { 
   var r = o[r = "_" + (e = "on" + e)] = o[r] || (o[e] ? [[o[e], o]] : []), a, c, d; 
   r[r.length] = [f, s || o], o[e] = function(e){ 
      try{ 
         (e = e || event).preventDefault || (e.preventDefault = function(){e.returnValue = false;}); 
         e.stopPropagation || (e.stopPropagation = function(){e.cancelBubble = true;}); 
         e.target || (e.target = e.srcElement || null); 
         e.key = (e.which + 1 || e.keyCode + 1) - 1 || 0; 
      }catch(f){} 
      for(d = 1, f = r.length; f; r[--f] && (a = r[f][0], o = r[f][1], a.call ? c = a.call(o, e) : (o._ = a, c = o._(e), o._ = null), d &= c !== false)); 
      return e = null, !!d; 
    } 
}; 

function formatCurrency(o, n, dig, dec) { 
   o.c = !isNaN(n) ? Math.abs(n) : 2; 
   o.dec = typeof dec != "string" ? "," : dec, o.dig = typeof dig != "string" ? "." : dig; 
   addEvent(o, "keypress", function(e) { 
      if (e.key > 47 && e.key < 58) { 
         var o, s, l = (s = ((o = this).value.replace(/^0+/g, "") + String.fromCharCode(e.key)).replace(/\D/g, "")).length, n; 
         if(o.maxLength + 1 && l >= o.maxLength) return false; 
         l <= (n = o.c) && (s = new Array(n - l + 2).join("0") + s); 
         for(var i = (l = (s = s.split("")).length) - n; (i -= 3) > 0; s[i - 1] += o.dig); 
         n && n < l && (s[l - ++n] += o.dec); 
         o.value = s.join(""); 
      } 
      e.key > 30 && e.preventDefault(); 
   }); 
} 

function fmtMoney(n, c, d, t){ 
   var m = (c = Math.abs(c) + 1 ? c : 2, d = d || ",", t = t || ".", 
      /(\d+)(?:(\.\d+)|)/.exec(n + "")), x = m[1].length > 3 ? m[1].length % 3 : 0; 
   return (x ? m[1].substr(0, x) + t : "") + m[1].substr(x).replace(/(\d{3})(?=\d)/g, 
      "$1" + t) + (c ? d + (+m[2] || 0).toFixed(c).substr(2) : ""); 
}; 

function soma() { 
  var f = document.forms[0]; 
  var valor1 = parseFloat(f.campo1.value.replace('.','').replace(',','.')); 
  var valor2 = parseFloat(f.campo2.value=2); 
  var valor3 = ('' + ((valor1||0) * (valor2||0))); 
  f.campo3.value = fmtMoney(valor3); 
} 

function init() { 
  formatCurrency(document.forms[0].campo1, 2, ".", ","); 

} 

window.onload = init; 
</script> 

<form> 
  <input name="campo1" onkeyup="soma()" size="20" /> + 
  <input name="campo2" onkeyup="soma()" size="20" /> = 
  <input name="campo3" size="20" /> 
</form>

Grato!

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal, eu tenho um formulário dinâmico que pode ser gerado, multiplicado varias vezes, abaixo ele é multiplicado duas vezes através de um loop... Veja que a seção Item, está Item 1 e Item 2, essa seção gerou duas vezes no loop.

Veja a figura:

http://www.ideiabiz.com/testee.jpg

testee.jpg

Veja também que o Item 1 e o Item 2 tem um campo chamado Valor unitário, nesse campo a pessoa digita o valor do produto, no item 1 por exemplo tem digitado R$ 100,00 e logo abaixo tem um campo chamado valor total do item 1 que é 200,00 pois um pouco acima no campo unidades a pessoa digitou o número 2 acusando 2 produtos que cada um custa 100,00 que foi digitado no campo Valor unitário, como falei antes. Entendeu?

Até aí tudo bem, o valor digitado no campo Valor unitário é multiplicado pela quantidade de unidades ou produtos digitados no campo Unidades.

Isso funciona no item 2 também e assim vai, não importa quantos itens o usuário gerar...

A questão é que quero saber como somar o campo valor total do item 1 com o valor total do item 2 para poder exibir lá no campo que fica no topo do formulário chamado Valor total da nota que está do lado de uma marca vermelha que deixei como referência, para acharem o campo. Como fazer isso?

Abaixo segue a parte do código que já faz isso tudo que citei acima.

<%for i=1 to session("qtitem") %>

<script type="text/javascript"> 
function mascara(o,f){
v_obj=o
v_fun=f
setTimeout("execmascara()",1)
}
function execmascara(){
v_obj.value=v_fun(v_obj.value)
}
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
}
function fmtMoney(n, c, d, t){ 
var m = (c = Math.abs(c) + 1 ? c : 2, d = d || ",", t = t || ".", 
/(\d+)(?:(\.\d+)|)/.exec(n + "")), x = m[1].length > 3 ? m[1].length % 3 : 0; 
return (x ? m[1].substr(0, x) + t : "") + m[1].substr(x).replace(/(\d{3})(?=\d)/g, 
"$1" + t) + (c ? d + (+m[2] || 0).toFixed(c).substr(2) : ""); 
}; 


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;

valortotalitem<%=i%>.value = parseFloat(valor<%=i%>.value.replace(',','.')) * quantidadev<%=i%>;

valortotalitem<%=i%>.value = fmtMoney(valortotalitem<%=i%>.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" name="valortotalitem<%=i%>" id="valortotalitem<%=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)%>"></td>
</tr>
</table>

<%next%>

Alguém sabe uma solução? é difícil isso?

Editado por marvi
Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal, coloquei um exemplo na Internet para que vocês possam ver funcionando uns campos e possam também olhar o código acessando o código fonte do HTML, pois assim acho que vai ficar mais prática para que possam enteder.

Acesse: http://www.ideiabiz.com/ok.htm

Verá que lá tem duas linhas, cada uma com o campo horizontal. A pessoa digita qualquer valor em moeda R$ em um campo e ao mesmo tempo é multiplicado por 2 e exibido do lado o valor total dessa multiplicação. E assim vai, tem outra linha com outro campo abaixo que serve para mesma coisa...

Até aí conseguir chegar. O que quero saber é como fazer com que o último campo some todos os campos que mostra o valor total dessa multiplicação acima dele?

Veja que tem valor total 1 e valor total 2 e como fazer para somar valor total 1 mais valor total 2 e exibir no campo de valores totais abaixo?

Obrigado!

Marcelo

Editado por marvi
Link para o comentário
Compartilhar em outros sites

  • 0

Não, está errado aí...

Você está somando tudo! Eu quero só somar os resultados que são na verdade o valor final de uma multiplicação por 2, entendeu?

Onde tem o campo valor total 1 e valor total 2 é exibido o valor da multiplicação por 2 digitada nos campos valor digitado em R$ 1 e valor digitado em R$ 2 e assim quero somar esses resultados e exibir no último campo abaixo

Veja uma figura para ver se entende:

teste.jpg

Foi digitado 10,00 que multiplicou por 2 = 20,00

novamente Foi digitado 10,00 que multiplicou por 2 = 20,00

Quero a soma do resultado dessa multiplicação 20,00 + 20,00 = 40,00

Como fazer isso?

Resolvir, veja o html

http://www.ideiabiz.com/ok.htm

Agora se eu colocar em um loop isso não roda... porque?

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;
    
    valortotalitem<%=i%>.value = parseFloat(valor<%=i%>.value.replace(',','.')) * quantidadev<%=i%>;

    valortotalitem<%=i%>.value = fmtMoney(valortotalitem<%=i%>.value);
    
    window.onload=soma1()
     
}
function soma1(){

var valortotalitem<%=i%> = document.getElementById('valortotalitem<%=i%>')

 var campo6 = document.getElementById('campo6');
        
    campo6.value = parseFloat(valortotalitem<%=i%>.value.replace(',','.'))

    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%>()" onkeyup="soma1();" 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" name="valortotalitem<%=i%>" id="valortotalitem<%=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)%>"></td>
                        </tr>
                      </table>

                      <input type="text" id="campo6" readonly name="campo6" size="8" style="font-family: Verdana; font-size: 10 px; color: #3A5278; border: 1px solid #3A5278; background-color:#EEEEEE">

ELe soma o total do item, mas não soma o total completo...

Editado por marvi
Link para o comentário
Compartilhar em outros sites

  • 0

Não sei como fazer, mas queria saber se esse script tem como fazer isso:

Veja que tem um loop onde esse valortotalitem é um campo do form e que vai se multiplicando de acordo com loop, se o loop for de for i=1 to 4, por exemplo, ele vai gerar 4 campos valortotalitem...

Beleza, esse Loop é capaz de ir gerando os campos valortotalitem e contando com o <%=i%> para informar que são campos duplicados, mas com o Name do campo diferentes...

Agora como fazer somar esses campos depois de o loop terminar? Cada campo gerado pelo loop a pessoa vai digitar em moeda R$ um valor, tipo 20,00 e se for dois loops serão dois campos digitados 20,00

Campo valortotalitem1: 20,00

Campovalortotalitem2: 20,00

Aí eu estou chamando a função abaixo para somar esses campos com loops acima, veja:

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;
    
    valortotalitem<%=i%>.value = parseFloat(valor<%=i%>.value.replace(',','.')) * quantidadev<%=i%>;

    valortotalitem<%=i%>.value = fmtMoney(valortotalitem<%=i%>.value);
    
    window.onload=soma1<%=i%>()
     
}
function soma1<%=i%>(){

var valortotalitem<%=i%> = document.getElementById('valortotalitem<%=i%>')

 var campo6 = document.getElementById('campo6');
        
    campo6.value = parseFloat(valortotalitem<%=i%>.value.replace(',','.')) + parseFloat(valortotalitem<%=i%>.value.replace(',','.'))

    campo6.value = fmtMoney(campo6.value);
    }
                        </script>
Mas o que acontece é que não funciona... acho que eu deveria ir guardando as informações dos campos gerados para somar tudo, tem como? uma idéia, mas não entendi bem... veja meu loop
<%for i=1 to session("qtitem"%>

function soma1<%=i%>(){

var valortotalitem<%=i%> = document.getElementById('valortotalitem<%=i%>')

 var campo6 = document.getElementById('campo6');
        
    campo6.value = parseFloat(valortotalitem<%=i%>.value.replace(',','.')) + parseFloat(valortotalitem<%=i%>.value.replace(',','.'))

    campo6.value = fmtMoney(campo6.value);
    }
<%next%>

                      <input type="text" id="campo6" readonly name="campo6" size="8" style="font-family: Verdana; font-size: 10 px; color: #3A5278; border: 1px solid #3A5278; background-color:#EEEEEE">
Só que ele faz soma do próprio campo e não do outro campo que foi gerado pelo loop... Se gerou 2 loops então: campo 1 = 20,00 campo 2 = 15,00 total = 35,00 Só que na hora da soma fica campo1+campo1 (20,00+20,00) e o certo é campo1+campo2 (20,00+15,00) Estava tentando fazer algo tipo....
function soma2<%=i%>(){ 

var planetas<%=i%> = new Array()
planetas<%=i%>[<%=i%>] = document.getElementById('valortotalitem<%=i%>') 

    document.write(planetas<%=i%>[<%=i%>] + "<br />")

}

alguém sabe colocar a sintaxe para ver se acumula valores:

Início {Encontra a soma dos valores}

Variáveis:

Inteiro: Valor, Soma;

Instruções:

Soma <- 0; {Inicializa a variável Soma}

Leia (Valor); {Primeira leitura}

Repita

Soma <- Soma + Valor; {Acumula valor}

Leia (Valor); {Leitura dos demais valores}

Até Valor = -1;

Imprima ('O VALOR TOTAL É:',Soma); {Mostra o resultado}

Fim.

Editado por marvi
Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal,

Te como fazer somar os campos? Tipo:

teste.jpg

Veja que já faço tudo aí, mas a soma total dos campos com o resultado multiplicado não funciona... tentei algo em javascript mas não sai... tipo um vetor, Array... em ASP tem como fazer isso?

Veja que esse formulário funciona: http://www.ideiabiz.com/ok.htm

Mas a questão é que conseguir fazer isso, o problema é fazer o resultado final, a soma dos campos onde tem o 40,00 na figura não funcionar em um loop de ASP, pois ele acaba auto-somando em vez de somar outros campos...

Veja também o meu sistema: http://www.ideiabiz.com/eletrofone/inserirprodutosok.asp libere o POP UP do internet explorar e digite numero 2 quando ele solicitar, verá que irá gerar o Item 1 e o Item 2

Nos itens gerados tem o campo unidades, digite uma quantidade la, tipo: 2, abaixo, no final do item, já pode ir para o campo Valor unitário: e coloque um valor, tipo 20,00 e verá que no outro campo abaixo mostra o valor total deste Item, que seria o Item 1. Valor total do item 1 é o campo que mostra o valor total.

Esse valor total é a multiplicação do valor digitado (os 20,00) no Valor unitário com o número 2 digitado com o campo unidades, entende? (20,00 X 2 = 40,00)

Agora no topo da página tem um campo que somará o campo valor total deste Item de todos os Itens... Chamado: Valor total da nota , mas ele não soma todos os itens, como resolver?

Já rodei e nada!

Pode ver o HTML! Codigo fonte!

Ver se ajuda essa lógica:

Eu estava usando isso, mas ele acaba se somando no loop e não somando com outro campo do loop

loop

Campo 1

Campo 2

next

Ele faz campo1 + campo1 e o certo é campo1+campo2

veja como eu fiz

function soma1<%=i%>(){

var valortotalitem<%=i%> = document.getElementById('valortotalitem<%=i%>')

var campo6 = document.getElementById('campo6');
        
campo6.value = parseFloat(valortotalitem<%=i%>.value.replace(',','.')) + parseFloat(valortotalitem<%=i%>.value.replace(',','.'))

campo6.value = fmtMoney(campo6.value);
    
      
}

Entendeu? esses valortotalitem<%=i%> é o nome e o ID do campo que é multiplicado varias vezes, mas não funciona somando... ele auto-soma

Editado por marvi
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...