Fala aee galera blz?
Eu sou novo aqui no forum, geralmente procuro mts codigos rsss e nunca postei um codigo relativamente meu em forum algum,
entaum hj resolvi postar um problema que tive, procurei varias soluções na internet , achei algumas, mas para atender a minha necessidade eu tive q desenvolver um código.

Eu precisava de uma função que pegasse qualquer numero, em qualquer formato e transformar para moeda nacional R$ 1.000,00.
eu acredito que possa existir código semelhante aqui, mas acho legal sempre mostrar soluções diferentes para mesmo problema para todos nós estudarmos..

Bem, chega de bla bla bla e vamos ao código.

CODE
<html>
<head>
<title></title>
</head>
<script language="javascript">
function calcula(){

  var valBru = document.getElementById('val').value;
  valBru = valBru.replace(',', '');
  valBru = valBru.replace('.', '');
  var qtd = String(valBru).length;
  var valCont = String(valBru).length - 2;
  var resto = valCont%3;
  var result = Math.floor((valCont)/3);
  var valFin = String(valBru);
  var voltas = 1;
  if (resto==0){result=result-1;}
  if (result<0)
  {
   if(qtd==1){
    valFin = valFin+",00";
   }
   else if(qtd==2)
   {
    valFin = valFin.substring(0,1)+","+valFin.substring(1,2)+"0";
   }
   else
   {
    valFin = "0,00";
   }
  }
  
  for (var i=0; i<=result; i++)
  {
   if(i==result)
   {
    if (qtd==5){
     resto=3;
    }  
    valFin = valFin.substring(0,resto)+","+valFin.substring(resto,qtd+voltas);
   }
   else
   {
    if (resto==0){
     resto=3;
    }
     valFin = valFin.substring(0,resto)+"."+valFin.substring(resto,qtd+voltas);          
   }
   voltas++;
   resto = resto+4;  
  }
  document.getElementById('resultado').innerHTML = valFin+" <- valor";
}
</script>
<body>
<div id="resultado"></div>
<input type="text" name="val" id="val">
<input type="submit" value="Calcula" id="btn" onClick="calcula(); return false;">
  
</body>
</html>


Para visualizar, é só jogar em um documento HTML e testar thumbsup.gif
Esse código tem algumas falhas como aceita letras e caracteres diferentes de "," e "." ... mas nada que adaptar uma criticazinha com uma expressão regular não resolva rsss

Mas ta ae, espero que ajude alguém assim como mts codigos aqui me ajudaram..


Abs

Você gostou? Comente no fórum!

Comentários:

Micox disse:

Ummm, muito bom. Valeu a contribuição cara.
Depois tenta fazer com expressoes regulares

Madureira disse:

Opa .....
Galera já tive a mesma nescessidade do nosso amigo. Eu fiz algumas funções para isso.
Segue.

function getEvento(evento){
//Funcao retorna o codigo ascii do evento de teclado
//verifica se estamso trabalhando com firefox ou ie
codigo = evento.keyCode;
if(codigo==0){
codigo = evento.charCode;
}
return (codigo);

}
function campoNumerico(evento){
//Funcao verifica se o valor e numerico ou nao;
//esta deve ser chamada atravez de um onkeypress do javascript da seguinte forma:
onkeypress="java script:return campoNumerico(event);"
codigo = getEvento(evento);
if( ( codigo > 46 && codigo < 58 ) || (codigo > 37 && codigo <41 ) || ( codigo==8 || codigo==9 ) ){
return true;
}
return false;
} da


function formataCampoMonetario(obj){
//Esta funcao formata campos monetarios. Deve ser chamada em um capo text da seguinte forma
//ela trabalha em conjunto com a funcao getMilhar
onkeyup="JavaScript formataCampoMonetario(this);"
var regrenpontos = new RegExp("[,.]+","g");
var regrenZeros = new RegExp("^0+","g");
a=obj.value;
//Aqui removemos os . , e zeros a esquerda.
a=a.replace(regrenpontos,"");
a=a.replace(regrenZeros,"");


if(a.length>=3){
obj.value=getMilhar(a.substr(0,a.length-2))+","+a.substr(a.length-2,a.length-1);
}else if(a.length==2){
obj.value="0,"+a;
}else if(a.length==1){
obj.value="0,0"+a;
}else{
obj.value="0,00";
}

}

function getMilhar(valor){
//Esta funcao formata campos numericos com pontos de milhar.

var vetor = new Array();
var retorno = "";
while(valor.length>3){
vetor.push(valor.substr(valor.length-3,valor.length-1));
valor=valor.substr(0,valor.length-3);
}

if(vetor.length>=2){
vetor.reverse();
retorno=vetor.join(".");
if(valor.length>0){
retorno=valor+"."+retorno;
}
}else if(vetor.length==1){
retorno=vetor[0];
if(valor.length>0){
retorno=valor+"."+retorno;
}
return retorno;
}else {
return valor;
}
return retorno;

}


Bom um comentário. Tentei trabalhar com recursividade, mas quando o campo atingia uma certa quantidade de caracteres ele "perdia" alguns números...
Espero ter ajudado..
Madureira

Ver o restante dos comentários no fórum (e aproveitar pra comentar também !).

Mais recentes em JavaScript e Ajax

Select dinâmico de estados e cidades
Por DGmike - Uma das dúvidas mais comuns para quem está começando...
Selecionar dinâmicamente um option de um select
Por Manito - Dica para quem fizer um form usando ajax...
Validador de fomulários v0.1 rc0 beta alpha
Por PXzin - [versÃo de teste em jquery]...
Como bloquear imagens do site
Por Lucasbr - E ai galera, blz? - se que é impossivel proteger realmente...
Validador de formulário
Por carlosmborgesjr - Boa tarde, - cara, seu validador ficou muito bom, muito...

Ver mais Artigos de JavaScript e Ajax.

Ver e retirar outras dúvidas no fórum Webly.

Alguns Direitos Reservados | RSS | O Fórum

Webly Portal e Fóruns - Internet + Humana | Design by ArthurHenrique.com