Archive

Posts Tagged ‘formato’

Formato de moneda en JavaScript

agosto 30, 2010 Comments off

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