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!

Anúncios

Ações

Information

17 responses

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 https://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;
}

18 01 2011
Paulo

Olá boa tarde, muito boa essa função que formata o número monetário para o padrão brasileiro, testei e funcionou muito bem, era realmente o que precisava. Mas eu não tô conseguindo fazer funcionar esse função da mascara para o numero, poderia me ajudar?

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
🙂

5 12 2009
Mario

valeu fera!!!

30 07 2010
Alexandre Broggio

Poxa vlw mesmo eu usava um plugin com jquery pra fazer isso mas quando o valor do campo era colocado de forma dinâmica o plugin não funcionava essa class caiu como uma luva ^_^ vlw mesmo Obrigado.

26 05 2011
fabio

Olha, muito Obrigado por compartilhar os conhecimentos. EXCELENTE script battisti, um detalhe tiago, usei o script disponibilizado pelo js em jpg do battisti e não tive esse problema. Embora os resultados são pegos por POST e simplesmente coloquei pra tirar o “.” dos valores e depois transformar “,” em “.” em ambos usando o srt_replace do PHP, desta forma se o usuario digitar 1.256,10 os replaces grava no campo float 1256.10 como disse não tive problema algum. Meu unico problema foi não ter lido e baixado o js antes.

14 11 2011
Anderson Oliveira

Muito bom.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s




%d blogueiros gostam disto: