Currency format - Formatar moeda
August 22nd, 2008Um amigo estava precisando de uma função para formatar campos de valores em R$ (reais) em formulários, ele achou umas por aí e pegou a que achou “melhorzinha”, modificou e ficou usando. Eu vi a função e falei: “Cara isso daí é uma droga! cheio de loops, ifs e elses, gambi mesmo”
Aí mostrei pra ele uma função do jsfromhell que me pareceu melhor. Só que ela tem um pequeno problema, quando tenho números com mais de 16 dígitos ela buga retornando o número como notação, por exemplo: 2183213123e31. Não que eu vá ter valores maiores que 16 dígitos, mas resolvi fazer a que segue abaixo:
String.prototype.currencyFormat = function (f, d, t) {
var n = (n = this.match(/\d/g)) ? n.join('').replace(/^0+/,'') : '0', f = (f) ? f : 2, d = (d) ? d : ',', t = (t) ? t : '.';
if (n.length < f + 1) return '0' + d + ((n.length < f) ? new Array(f - n.length + 1).join('0') + n : n)
else return n.substr(0, n.length - f).split('').reverse().join('').match(/\d{1,3}/g).join(t).split('').reverse().join('') + d + n.substr(n.length - f)
}
Clique aqui para fazer download do código acima
Os argumentos são (usei os mesmos da função do jsfromhell, achei o suficiente):
f = número de casas decimais
d = separador de decimos (’,’ virgula por padrão)
t = separador de milhar (’.’ ponto por padrão)
Exemplos:
<input type="text" onkeyup="this.value = this.value.currencyFormat()" /> <input type="text" onkeyup="this.value = this.value.currencyFormat(3)" /> <input type="text" onkeyup="this.value = this.value.currencyFormat(3, ',', '.')" />
Recomendo usar uma class nos campos que quiser formatar e fazer uma rotina para adicionar a função nos campos com a tal class. Quem quiser a função sem compactação para poder entender melhor é só pedir. Testado no Firefox 3 e no Internet Explorer 6. Até!
September 14th, 2008 at 6:01 pm
Amigo, muito boa essa função…
Tô tentando aplicar um limitador de caracteres nela. Você poderia me passá-la sem a compactação? Muito obrigado!