Importante Para Download e Demonstração Acesse
http://battisti.etc.br/projetos/
A algum tempo coloquei aqui no battisti.wordpress 3 funções para manipular valores monetários. Hoje resolvi agrupa-las em uma única classe.
ATENÇÃO BAIXA O MOEDA.JPG E RENOMEIE PARA MOEDA.JS ou COPIE a CLASSE ABAIXO
Moeda.js
/**
* moeda
*
* @abstract Classe que formata de desformata valores monetários
* em float e formata valores de float em moeda.
*
* @author anselmo
*
* @example
* moeda.formatar(1000)
* >> retornar 1.000,00
* moeda.desformatar(1.000,00)
* >> retornar 1000
*
* @version 1.0
**/
var moeda = {
/**
* retiraFormatacao
* Remove a formatação de uma string de moeda e retorna um float
* @param {Object} num
*/
desformatar: function(num){
num = num.replace(“.”,”");
num = num.replace(“,”,”.”);
return parseFloat(num);
},
/**
* formatar
* Deixar um valor float no formato monetário
* @param {Object} num
*/
formatar: function(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;
},
/**
* arredondar
* @abstract Arredonda um valor quebrado para duas casas
* decimais.
* @param {Object} num
*/
arredondar: function(num){
return Math.round(num*Math.pow(10,2))/Math.pow(10,2);
}}
Como usar:
Inclua o arquivo moeda.js no HEAD de sua página
alert(moeda.formatar(1000));
alert(moeda.desformatar("1.000,00"));
Quem se interessou pela forma como a classe moeda.js foi codificada leia este texto.
Por hoje é só pessoal!








[...] function moeda2float(moeda){ moeda = moeda.replace(“.”,”"); moeda = moeda.replace(“,”,”.”); return parseFloat(moeda); } Scripts usando classe http://battisti.wordpress.com/2007/12/03/classe-formatar-moeda-valores-monetarios-em-javascript/ [...]
É isso maninhu!!!
Muito bom trabalho!!
Vai Ajudar muita gente…
abraços…
Opa,
Não funcniona o link para pegar o script!!!!!
Desculpe,
Não havia notado o comentário para renomear de jpg para js.
Então o que acontece é que o WORDPRESS não deixa colocar .js ai tive que fazer essa gambiarra de colocar em jpg
.
Cara muito obrigado,
esse funçao me quebrou um galhao aqui no projeto
todos os creditos reservados… flow
Bom dia, obrigado pelo seu script, tem me ajudado bastante.
Porém tem uma coisa que não sei como resolver, quando uso valores com um separador de milhar apenas, funciona corretamente a desformatação. Ex: 100.000,00 para 10000000.
Porém quando coloco mais um separador de milhar no número, não funciona a desformatação. Ex: 1.000.000,00 fica 1000.
Alguém passou por isso e sabe como solucionar?
Na verdade oq estou precisando, é somar os valores em moeda que o usuário digita e retornar o total dos campos digitados.
Abs
Poxa funcionou lindo esse script valeu pela colaboração !!!!
Fiz algumas alterações
* Valores acima de 1 milhão
* Valores negativos
* Conversão de Valores
* Código melhor formatado e legível
Espero que ajude!
/**
* moeda
*
* @abstract Classe que formata de desformata valores monetários
* em float e formata valores de float em moeda.
*
* @example
* moeda.formatar(1000)
* >> retornar 1.000,00
* moeda.desformatar(1.000,00)
* >> retornar 1000
*
* @version 1.0
**/
var moeda = {
/**
* retiraFormatacao
* Remove a formatação de uma string de moeda e retorna um float
* @param {Object} num
*/
desformatar: function(num){
while(num.indexOf(‘.’) != -1){
num = num.replace(“.”,”");
}
while(num.indexOf(‘,’) != -1){
num = num.replace(“,”,”.”);
}
while(num.indexOf(‘ ‘) != -1){
num = num.replace(” “,”");
}
return parseFloat(num);
},
/**
* formatar
* Deixar um valor float no formato monetário
* @param {Object} num
*/
formatar: function(num){
num = num.toString();
while(num.indexOf(‘ ‘) != -1){
num = num.replace(” “,”");
}
num = parseFloat(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;
}
ret = ret.replace(” “,”");
return ret;
},
/**
* arredondar
* @abstract Arredonda um valor quebrado para duas casas
* decimais.
* @param {Object} num
*/
arredondar: function(num){
return Math.round(num*Math.pow(10,2))/Math.pow(10,2);
}
}
Máscara p/ campos
function formataMoeda(objTextBox, SeparadorMilesimo, SeparadorDecimal, e){
var sep = 0;
var key = ”;
var i = j = 0;
var len = len2 = 0;
var strCheck = ‘0123456789′;
var aux = aux2 = ”;
var whichCode = (window.Event) ? e.which : e.keyCode;
if(whichCode == undefined){
whichCode = e.keyCode;
}
// 13=enter, 8=backspace as demais retornam 0(zero)
// whichCode==0 faz com que seja possivel usar todas as teclas como delete, setas, etc
if ((whichCode == 13) || (whichCode == 0) || (whichCode == 8))
return true;
key = String.fromCharCode(whichCode); // Valor para o código da Chave
if (strCheck.indexOf(key) == -1)
return false; // Chave inválida
len = objTextBox.value.length;
for(i = 0; i < len; i++)
if ((objTextBox.value.charAt(i) != ‘0′) && (objTextBox.value.charAt(i) != SeparadorDecimal))
break;
aux = ”;
for(; i 2) {
aux2 = ”;
for (j = 0, i = len – 3; i >= 0; i–) {
if (j == 3) {
aux2 += SeparadorMilesimo;
j = 0;
}
aux2 += aux.charAt(i);
j++;
}
objTextBox.value = ”;
len2 = aux2.length;
for (i = len2 – 1; i >= 0; i–)
objTextBox.value += aux2.charAt(i);
objTextBox.value += SeparadorDecimal + aux.substr(len – 2, len);
}
return false;
}
function formataMoeda_Negativo(objTextBox, SeparadorMilesimo, SeparadorDecimal, e){
var sep = 0;
var key = ”;
var i = j = 0;
var len = len2 = 0;
var strCheck = ‘-0123456789′;
var aux = aux2 = ”;
var whichCode = (window.Event) ? e.which : e.keyCode;
if(whichCode == undefined){
whichCode = e.keyCode;
}
// 13=enter, 8=backspace as demais retornam 0(zero)
// whichCode==0 faz com que seja possivel usar todas as teclas como delete, setas, etc
if ((whichCode == 13) || (whichCode == 0) || (whichCode == 8))
return true;
key = String.fromCharCode(whichCode); // Valor para o código da Chave
if (strCheck.indexOf(key) == -1)
return false; // Chave inválida
len = objTextBox.value.length;
for(i = 0; i < len; i++)
if ((objTextBox.value.charAt(i) != ‘0′) && (objTextBox.value.charAt(i) != SeparadorDecimal))
break;
aux = ”;
for(; i 2) {
aux2 = ”;
for (j = 0, i = len – 3; i >= 0; i–) {
if (j == 3) {
aux2 += SeparadorMilesimo;
j = 0;
}
aux2 += aux.charAt(i);
j++;
}
objTextBox.value = ”;
len2 = aux2.length;
for (i = len2 – 1; i >= 0; i–)
objTextBox.value += aux2.charAt(i);
objTextBox.value += SeparadorDecimal + aux.substr(len – 2, len);
}
return false;
}
Forma de Utilizar
ou
Usei a função para formatar um campo com valor financeiro atraves do onBlur.
Um problema que encontrei era quando a pessoa digitava um valor com decimal já. ex: 123,5
ele não reconhecia o 0,5 como decimal.
Coloquei a seguinte linha no metodo formatar:
num = num.replace(“,”,”.”);
logo abaixo do
num = num.toString();
e funcionou.
Abraços