Formatar moeda”valores monetários” em Javascript

8 03 2007

Importante Para Download e Demonstração Acesse

http://battisti.etc.br/projetos/

Saudações

Pessoal ai vão 3 funções bem legais para manipular valores monetários em javascript.

1 – roundNumber

Em php temos a função round cujo objetivo é arredondar valores em um certo número de casas decimais. Já no javascript para definirmos a quantidade de casas decimais temos que usar de artimanhas 🙂 .

function roundNumber (rnum) {

   return Math.round(rnum*Math.pow(10,2))/Math.pow(10,2);

}

2 – float2moeda

A partir de um valor float ela retorna o valor formatado com separador de milhar e vírgula nos centavos.

function float2moeda(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;

}

3 – moeda2float

Pega um valor formatado com virgula e separador de milha e o transforma em float

function moeda2float(moeda){

   moeda = moeda.replace(".","");

   moeda = moeda.replace(",",".");

   return parseFloat(moeda);

}

Referência

http://www.truquesedicas.com/tutoriais/javascript/00018a.htm

http://www.mediacollege.com/internet/javascript/number/round.html

Anúncios

Ações

Information

63 responses

3 06 2007
Roger de Almeida Haroldo

Programar é criar soluções simples!!!!!!!

Para formatar um valor cujo separador decimal seja o ponto, basta usar a seguinte função no PHP.

//Exemplo:

$ValorDolar=8125.39;
$ValorReal = number_format($ValorDolar, 2, ‘,’, ‘.’);
echo $ValorReal;

// O resultado será 8.125,39

14 08 2009
Jorge

@Roger

Vlw pela dica cara. Por incrível que pareça estava justamente precisando fazer isso em PHP. =)

24 01 2012
thibraga06

Muito bom, tbm tava precisando 😀
Valew (Y)

3 06 2007
battisti

Sua solução é simples realmente, mas ela esta em PHP. O objetivo deste script é fazer a formatação e a exibição dos valores apenas em Javascript, isto é necessário por exemplo em carrinhos de compras ou telas de pagamentos que usam Ajax, nestas situações as funções em PHP são de processamento custo.

Devemos tornar a vida dos usuário simples, mesmo que isto nos leve a uma programação mais complicada.

6 08 2012
Dhiogo Boza

isso mesmo!!

28 08 2007
Rodrigo

Valeu, foi de grande ajuda.

Tens o meu e-mail, precisando é só pedir.

PHP, AJAX, JavaScript, MySQL

26 10 2007
Rafael

Cara boa materia,
foi de grande ajuda para um projeto que estou participando.

Parabéns e obrigado!!

31 10 2007
Paulo Araujo

Bom mesmo, meus parabéns! na verdade eu estava querendo o código pra fazer em PHP mesmo rsrs. Obrigado Roger pela colaboração!! Mas salvei seu código aqui, pq com certeza vou acabar precisando, afinal funciona tanto em JS como em AS sem nenhuma alteração ;)!
Abraços e parabéns!

21 11 2007
Pablo Leal

Olha realmente esta é a melhor solução que encontrei. Parabéns…

27 11 2007
Luiz Felipe Weber

Valeu mesmo… Foi de grande ajuda este script de conversão em javascript…

“Mãos rápidas levam menas chibatadas”…

hehehehhe

valew meu chpa.

30 12 2007
Silvio

Valeu ai!
Ajudou muito estes script para moeda…
Muito bom mesmo!!
Sem palavras!
[]`s

9 01 2008
Rodrigo

Ola. Obrigado, essa função foi muito util num sistema em Ajax que estou desenvolvendo! Valeuu!

19 02 2008
Gerson

Muito bom script, encaixa perfeitamente no que eu estou procurando, que é formatar a saída de um valor float do ajax.

Tks!

19 02 2008
Gerson

Valeu

19 03 2008
Ana Paula

Muito bom o script, era justamente o que procurava!
=)

18 04 2008
Luiz Godoy

Scripts úteis, obrigado por publica-los com a referência.

abs,

19 04 2008
battisti

Então Luiz isso que você citou REFERÊNCIAS eu acho de extrema importância que elas apareçam em qualquer publicação por dois motivos:

1 – Na nossa área é muito difícil que alguém tenha aprendido alguma coisa sem ter consultado uma referência ou outro indivíduo de boa vontade tenha ajudado;
2 – Deixar uma trilha de como você obteve aquele conhecimento auxilia outras pessoas a seguir pelo mesmo caminho a fim de também conhecerem mais profundamente o assunto.

Só uma observação esses script foram compilados nesta classe:
https://battisti.wordpress.com/2007/12/03/classe-formatar-moeda-valores-monetarios-em-javascript/

8 05 2008
Ivan Kuiava

Anselmo.. seu script é excelente… salvou minha vida… ehheheh

abraço

19 08 2008
Marcos Cestari

Parabéns Muito bom…
Continue assim.

Abraço

Marcos Cestari

30 08 2008
Luiz WeberScripts

Valeu mais uma vez,

Vou adicionar teu site aqui nos meus favoritos do meu IE 8 beta 2

euahuehaheha

abraço

30 08 2008
battisti

O IE8 esta para a minha pessoal assim como o alho para vampiros ou balas de prata para lobisomem!

1 09 2008
Fernando

Assim como as versões anteriores do IE.
Estou aprendendo Ajax, e estava googleando atrás dessa função. No PHP até sei fazer, mas eu precisava fazer isso antes do usuário enviar os dados.
Muito obrigado!!

17 10 2008
Francisco

Esse código não funciona pra valores acima de 1 milhão,
eu criei uma pequena solução que serve como complemento a esse código =)

var formata_valor = new Array();
var teste = novo_valor
formata_valor=teste.split(“.”)
valor_formatado=”

for (i=1;i<formata_valor.length;i++)
{
valor_formatado = valor_formatado+formata_valor[i-1];
}
valor_formatado = valor_formatado+”.”+formata_valor[formata_valor.length-1]

parseFloat(valor_formatado);
alert(valor_formatado);

17 10 2008
battisti

GRANDE CONTRIBUIÇÃO FRANCISCO!!!!!!!!!!!!

17 10 2008
Francisco

Disponha!
É sempre um prazer colaborar com o compartilhamento de informações, afinal, a dificuldade que eu encontrei, pode ser a dificuldade de outras pessoas, do mesmo jeito que este blog me ajudou com a dica sobre como tratar e arredondar os valores, que fique como meu agradecimento esse pequeno e humilde complemento =)

Abs.

16 12 2008
Matheus

Boa cara, parabéns

16 01 2009
Feliphe

Boa Francisco, valeu msmo cara, esse codigo q vc postou ai, salvou minha cabeça hj aki no serviço…:D

28 07 2009
Douglas

Valeu! Muito boa!
Para o que eu precisava foi perfeita.

Obrigado e Saudacoes…

4 11 2009
Hugo Martins

Muito obrigado .. essa função me quebrou um grande galho . melhor ,,, uma arvore inteira .. tks

5 11 2009
battisti

estamos ai

5 12 2009
Mario

Cara, muito obbrigado!!!
Esse foi o ÚNICO código que funcionou perfeitamente pra mim.
Tentei inclusive aquele “formatCurrency()” mas não é compativel com todos os navegadores E O SEU É!!

7 12 2009
battisti

É isso ai não testei no IE8 mas deve funcionar!

31 01 2010
Vinidog

Parabéns pela classe… Quebrou uma árvore!!!

😉

1 02 2010
battisti

Fico feliz que a classe tenha ajudado!

/** * [s] Anselmo Battisti * —————————- * Cadastro On-Line de Cliente * http://clientec.com.br **/

________________________________

25 02 2010
Fabrício

Muitooooo bom, está de parabéns.

1 06 2010
Mike

Thanks!

17 06 2010
Rogério

Muito bom!

Obrigado

3 09 2010
Jorge

Pow cara!

Muito bom velho!

Foi de grande ajuda!

Deus te Abençoe!

11 11 2010
Fernanda

Olá!

Mais de três anos se passaram desde que postou estas funções e HOJE elas me ajudaram muito!!

Só tenho a agradecer!

Muito obrigada mesmo 😀

26 04 2011
Helivander

Vlw amigo me ajudou muito!

5 05 2011
Jorn

muda um pouco a função, senão vai dar problema.

function moeda2float(moeda){
moeda = moeda.replace(“,”,”|”);
for(var x=0;x<moeda.length;x++){
moeda = moeda.replace(".","");
}
moeda = moeda.replace("|",".");
return parseFloat(moeda);
}

14 05 2011
Hyago

Usei a float2moeda aqui e funcionou perfeitamente.

Muito obrigado !!

17 06 2011
capitaoplaneta

Quebrou um galho e tanto! Parabéns. A Maioria que encontramos no Google são máscaras pra campo, mas nessa aí você mandou muito bem! Valeu!

29 06 2011
Mario Arroyo

Muito bom os scripts, obrigado por publicar aqui no blog. Me ajudou muito com uma interface dinâmica que eu estava construindo utilizando jQuery. Abraços!

10 08 2011
Luiz Felipe Weber

Estas funções me ajudaram mais uma vez. Seria interessante fazer em classes, orientado a objeto? hauehauhe

( a cada ano que eu uso e comento aqui )

5 10 2011
dicasdodi

Alguém pode me dar um help, tentei usar a função que formata o ponto de milhar e dos decimais, mas não funfou. A minha função atualmente está assim:

function(result) {
preco = Math.ceil(result.getDistance().meters /1000 * 3.00);

$(‘#aviso’).html(“Orçamento estimado R$: ” + preco);
});

Tentei fazer da seguinte maneira:

function(result) {
preco = Math.ceil(result.getDistance().meters /1000 * 3.00);
preco = Math.abs(preco);

if(isNaN(preco)) preco = “0”;
cents = Math.floor((preco*100+0.5)%100);

num = Math.floor((preco*100+0.5)/100).toString();

if(cents < 10) cents = "0" + cents;
for (var i = 0; i < Math.floor((preco.length-(1+i))/3); i++)
num = num.substring(0,num.length-(4*i+3))+'.'
+num.substring(preco.length-(4*i+3));

ret = preco + ',' + cents;

if (x == 1) ret = ' – ' + ret;

$('#aviso').html("Orçamento estimado R$: " + ret);
});

Agradeço a atenção!!

29 11 2011
marcelo

Muito bom…

9 01 2012
Leandro M.

Não podia deixar de externar meus agradecimentos aqui… Era exatamente o que eu estava procurando. Ajudou demais.

Muito grato.

6 02 2012
Maicon

Ótima solução. Obrigado pelo script.

28 02 2012
giulliano

Obrigado , pela função de string moeda PT-Br para Float. Não é difícil, mas ajudou.

17 04 2012
marciocg

grato por compartilhar teu conhecimento.

11 07 2012
Dartanhan

fantástico, matou meu problema em poucos segundos…

18 07 2012
Bruno Calheira

Parabéns, cara!
Ótima solução.

25 09 2012
Cris

Existe algum comando para arredondar 11.5 para 11 ao inves de 12 em javascript?

18 01 2013
Bruno Louvem

Battisti estou tendo problema com a Classe moeda.js, ele só funciona no IE, no Firefox e no Chrome não funciona,
No chrome diz: function replace() undefined,
e no Firefoz : num is undefined, n sei oque pode estar errado.

$(‘.controladorItem’).each(function(){
var numQtd = this.valdiv;
var numVal = this.valdiv;
var qtd = moeda.desformatar($(‘#itpedQuantidade_’+numQtd).val());
//alert(qtd);
var vlr = moeda.desformatar($(‘#itpedValor_’+numVal).val());

valorItem = qtd*vlr;
valorTotal = valorTotal + valorItem;

25 04 2013
graficalatele.blogspot.com

Hi there, I found your site by way of Google

whilst looking for a comparable matter, your site came up, it appears
to be like

great. I’ve bookmarked it in my google bookmarks.

29 06 2013
Junior

Parabéns cara! Ajudou-me muito! Segue abaixo a minha humilde contribuição… vai que alguém necessite também. Eu precisava de algo que formatasse também peso com 3 casas e taxa com 5 casas decimais. Para efeito de respeito a você mantive o nome da função, embora agora ela formate não só moeda.

function float2moeda(onum, dig) {
//- parametro quatidade de dígitos

// talvez trocar o nome da variável de cents para decimals
cents = Math.floor((num*Math.pow(10,dig)+(1/(2*Math.pow(10, dig-2))))%Math.pow(10,dig));

//if(cents < 10) cents = "0" + cents;
cents = ("" + Math.pow(10,dig) + cents);
cents =cents .substring(cents .length – Math.pow(10,dig).toString().length+1, cents.length);


}

Mais uma vez muito obrigado!
jr!

3 07 2013
Augusto

Demais! muito boa a função. Essa função foi herdada? ou você criou do zero?

17 09 2013
Fabio Andrade

muito obrigado, eu estava precisando justamente disso!!!! muito grato!

24 04 2015
Flavio

Bom tbm fiz uma solução para o caso, que pra mim resolveu o problema, pode ser util pra alguém tbm, tem algumas fixas ai que dá pra melhorar, mas ai é questão de adaptar mesmo, pq no meu banco o decimal é separado por ponto.

var myObj = {

$convertToMoney: function(dado)
{
var valor = dado.toString().split(‘.’)[0],
dec = dado.toString().split(‘.’)[1],
dadoConvertido = “”,
cont = 0,
i = 0,
digito = “”;

for (i = valor.length – 1; i >= 0; i -=1)
{
digito = valor.charAt(i);
if (cont === 3)
{
dadoConvertido = “.” + dadoConvertido;
cont = 0;
}
dadoConvertido = digito + dadoConvertido;

cont++;
}

return “R$ ” + dadoConvertido + “,” + dec;
}
};

24 04 2015
Flavio

Ops!! uma pequena correção no return, o certo é:

return “R$ ” + dadoConvertido + (dec === undefined ? “” : “,” + dec);

5 10 2016
Marco Túlio Lacerda

unico que funcionou certinho. Obrigado

18 10 2017
Armando

Cara muito obrigado, deu certinho, você deve ter um penis enorme… curti =*

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: