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

máscara de moeda no campo


marvi

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

Valor unitário: 1.000,00 X 2

Total: 2,00

Por que? Deveria ser 2000 também abaixo...

O problema aí é quando entra o ponto, . , 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!

Fica mais facil assim...

Não tem como então?

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

7 respostass a esta questão

Posts Recomendados

  • 0

Oi Marvi, você está fazendo as conversões de forma errada. Use alerts para informar para você o valor que a variável está carregando em pontos estratégicos do código.

Eu só dei uma olhada rápida, acho que você está convertendo números assim: 2.500,00 > 2.500.00

Ponto para linguagem de programação é vírgula para nós. Pode estar dando pau na hora em que tira as vírgulas....

O certo seria primeiro retirar os pontos:

2.500,00 > 2500,00

Depois retirar a vírgula e substituí-la por ponto:

2500,00 > 2500.00

E só então calcular o valor.

Link para o comentário
Compartilhar em outros sites

  • 0

Não entendi bem....

Na hora de digiar o valor deve ser assim R$ 2000,00 pois com 2.000,00 não pode por causa do ponto isso? Quer dizer que para cadastrar algo eu faço 1000,00 e na hora de exibir uso um replace e etc para mostrar assik 1.000,00 é isso que fala?

Pois quando deixo a máscara assim: 2.000,00 dar erro, mas quando mudo a máscara e ela fica 2000,00 os cáculos sai perfeito, vi agora isso!

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

  • 0
Não entendi bem....

Na hora de digiar o valor deve ser assim R$ 2000,00 pois com 2.000,00 não pode por causa do ponto isso? Quer dizer que para cadastrar algo eu faço 1000,00 e na hora de exibir uso um replace e etc para mostrar assik 1.000,00 é isso que fala?

Pois quando deixo a máscara assim: 2.000,00 dar erro, mas quando mudo a máscara e ela fica 2000,00 os cáculos sai perfeito, vi agora isso!

Então marvi, vou tentar ser mais claro. Digamos que eu digite no seu campo um valor e sua máscara inicial coloque o ponto e a vírgula e o resultado seja esse:

2.300,90

Essa linha aqui do seu código:

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

Ela vai pegar o valor e substituir a virgula por ponto, ta vendo? Então aquele valor inicial agora é esse : 2.300.90

Esse número não existe! não existe um número com dois pontos ( para nós vírgulas ). Não terá cálculo com número assim.

Link para o comentário
Compartilhar em outros sites

  • 0

Não é essa linha, inclusive eliminei ela e o problema continuo... a questão está aqui:

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

Veja que nesse d{3} conta as cadas e coloca o ponto... tanto que coloquei d{6} e como não tinha casas digitadas até 6 ele não gerou pontos, antes: 1.200,00, ficou 1200,00 e assim o cáculo foi permetido, entendeu?

Link para o comentário
Compartilhar em outros sites

  • 0

Marvi , decidi fazer um exemplo do funcionamento que deseja fazer, talvez com o código fique mais fácil de esclarecer:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<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 foreach (arr, fn) {
for(var x = 0; x < arr.length ; x++)
fn(arr[x])
}

function multiplica( x ){
var v = x.value.replace('.', '')
v = v.replace(',', '.')
v = parseFloat(v) * 2
x.value = v.toFixed(2)
}

function soma(total, valores){
var E = 0
var aux
foreach(valores, function(el){
if(el == total) return
aux = el.value.replace('.', '')
aux = aux.replace(',', '.')
E += parseFloat(aux)
})
total.value = E.toFixed(2)
}

window["onload"] = function(){
var tabela = document.getElementById("tabela")
var input = tabela.getElementsByTagName("input")
var valores = []
foreach(input, function(el){
if( el.className !="readonly" ){

el["onkeypress"] = function(){ mascara(this, mreais);}
el["onblur"] = function(){
var next = this.parentNode.nextSibling.getElementsByTagName('input')[0]
next.value = this.value
multiplica(next)
mascara(next, mreais)
}
}
else
valores.push(el)
})
document.getElementById("total").onclick = function(){
soma(this, valores)
mascara(this, mreais)
}
}

</script>

</head>
<body>

<table id="tabela" border="1">
<thead>
<tr>
<th>Valor digitado em R$</th>
<th>Valor total</th>
</tr>
</thead>
<tfoot>
<tr>
<td><strong>Soma de todos os valores totais</strong></td>
<td><input type="text" value ="Clique para somar" id="total" class="readonly" readonly="true"/></td>
</tr>
</tfoot>


<tbody>
<tr>
<td>
<input type="text" /><label> x2 = </label>
</td>
<td>
<input type="text" class="readonly" readonly="true"/>
</td>
</tr>
<tr>
<td>
<input type="text" /><label> x2 = </label>
</td>
<td>
<input type="text" class="readonly" readonly="true"/>
</td>
</tr>

</tbody>
</table>


</body>
</html>
[/codebox]

Salva como html e roda na sua máquina, dá uma olhada no código fonte pra entender o que eu fiz.

Aqueleabraço.

Link para o comentário
Compartilhar em outros sites

  • 0

Pera que vou ver...

Na verdade não estou entendo... você acabou criando funções diferentes também, tirou uma função que tinha... não só se baseou no replace e assim me perdi aqui o que deve ser feito especificamente relacionado ao código que postei.

O seu resultado não é onkeyup e sim usando o onclick, isso?

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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...