Formato de moneda en JavaScript
30 ago
La función quedó un poquito larga pero permite especificar el número de decimales y los separadores (que varían de país a país).
function currency(value, decimals, separators) {
decimals = decimals >= 0 ? parseInt(decimals, 0) : 2;
separators = separators || ['.', "'", ','];
var number = (parseFloat(value) || 0).toFixed(decimals);
if (number.length <= (4 + decimals))
return number.replace('.', separators[separators.length - 1]);
var parts = number.split(/[-.]/);
value = parts[parts.length > 1 ? parts.length - 2 : 0];
var result = value.substr(value.length - 3, 3) + (parts.length > 1 ?
separators[separators.length - 1] + parts[parts.length - 1] : '');
var start = value.length - 6;
var idx = 0;
while (start > -3) {
result = (start > 0 ? value.substr(start, 3) : value.substr(0, 3 + start))
+ separators[idx] + result;
idx = (++idx) % 2;
start -= 3;
}
return (parts.length == 3 ? '-' : '') + result;
}
El primer parámetro debe ser un número (cualquier valor inválido regresa “0.00″). Este es el único parámetro obligatorio.
El segundo parámetro es el número de decimales (por defecto 2) y el tercero es un arreglo con los separadores en este orden: Separador de miles, separador de millones, separador de decimales. Por defecto es ['.', "'", ','] que es el que se usa en Colombia.
Algunos ejemplos:
currency(NaN); // "0.00" currency(0); // "0.00" currency(123456567.89); // "123'456.567,89" currency(-123456567.89); // "-123'456.567,89" currency(1234.56, 1); // "1.234,5" currency(1234.56, 1, [',', "'", '.']); // "1,234.5"
Licencia: MIT