Classe Formatar Moeda / Valores Monetários em Javascript

3 12 2007

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!


Ações

Informações

12 respostas

3 12 2007
Formatar moeda”valores monetários” em Javascript « Anselmo

[...] 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/ [...]

2 01 2008
Silvio

É isso maninhu!!!
Muito bom trabalho!!
Vai Ajudar muita gente…
abraços…

19 02 2008
Gerson

Opa,

Não funcniona o link para pegar o script!!!!!

19 02 2008
Gerson

Desculpe,

Não havia notado o comentário para renomear de jpg para js.

19 02 2008
battisti

Então o que acontece é que o WORDPRESS não deixa colocar .js ai tive que fazer essa gambiarra de colocar em jpg :) .

29 05 2008
Regio

Cara muito obrigado,
esse funçao me quebrou um galhao aqui no projeto
todos os creditos reservados… flow

10 09 2008
Luis Fernando

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

24 09 2008
kellyene coelho

Poxa funcionou lindo esse script valeu pela colaboração !!!!

11 11 2008
Jean Michél Marca

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);
}
}

11 11 2008
Jean Michél Marca

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;
}

11 11 2008
Jean Michél Marca

Forma de Utilizar

ou

8 07 2009
Tiago

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
:)

Deixe um comentário