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
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
Comentários:
Micox disse:
Depois tenta fazer com expressoes regulares
Madureira disse:
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 !).