Formatação em java script para valores monetários utilizando prototype
/*
decimal_sep: caracteres utilizados como separtor decimal, o padrão é '.' quando omitidos
thousands_sep: char usado como separador de milhares, o padrão é ',' quando omitidos
*/
Number.prototype.toMoney = function(decimals, decimal_sep, thousands_sep)
{
var n = this,
c = isNaN(decimals) ? 2 : Math.abs(decimals), //se decimal é zero devemos levá-lo, isso significa que o usuário não quer mostrar qualquer decimal
d = decimal_sep || '.', //se nenhum separador de decimal é passado usamos o ponto como separador de decimal padrão (que deve usar um separador de decimal)
/*
conforme [http://stackoverflow.com/questions/411352/how-best-to-determine-if-an-argument-is-not-sent-to-the-javascript-function]
o caminho mais rápido para verificar se o parâmetro não definido é usar typeof valor === 'indefinido'
em vez de fazer === valor indefinido.
*/
t = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
// se você não quiser usar um separador de milhares você pode passar cadeia vazia como valor thousands_sep
sign = (n < 0) ? '-' : '',
// extraindo o valor absoluto da parte inteira do número e convertendo a cadeia
i = parseInt(n = Math.abs(n).toFixed(c)) + '',
j = ((j = i.length) > 3) ? j % 3 : 0;
return sign + (j ? i.substr(0, j) + t : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : '');
}
Number.prototype.toBrMoney = function(decimals) {
return this.toMoney(decimals,',','.');
};
Testando o código acima
Nenhum comentário:
Postar um comentário