Formatear números decimales con Javascript

Supongamos que tenemos la siguiente constante numérica:

const numero = 1234567.89;

Este es el formato correcto, con el punto para separar decimales. Sin embargo en algunos países como en donde yo vivo, Argentina, nosotros separamos los decimales con comas.

Además se suele utilizar el punto (.) como símbolo para separar en miles.

¿Es decir, se puede cambiar de verse así: «1234567.89» a verse: «1.234.567,89»?

Claro que sí.

Antes de empezar hay que aclarar que el siguiente ejemplo sólo debe usarse para mostrar información por pantalla, al usuario. Si tuvieses que guardar el número por ejemplo en una base de datos, lo recomendable es mantener el formato original.

Método toLocaleString()

Este método convierte un número en un texto con formato, según la localización que le hayamos indicado.

Por ejemplo:

//Número que queremos formatear.
const numero = 1234567.89;
//Cadena de texto con el formato 'de-DE'
const numero_formateado = numero.toLocaleString('de-DE');
//Salida por consola.
console.log(numero_formateado);

En este último caso elegimos el standard alemán, que si bien no es el idioma oficial de Argentina, comparte el formato que mencionamos anteriormente.

Si queremos asegurarnos de que sea el de nuestro país, podemos cambiarlo también:

//Número que queremos formatear.
const numero = 1234567.89;
//Cadena de texto con el formato de Argentina.
const numero_formateado = numero.toLocaleString('es-AR');
//Salida por consola.
console.log(numero_formateado);

(Lista de localizaciones: https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_tolocalestring_date_all)

Aunque en este último caso no cambia, porque son similares. Es decir que el resultado es: «1.234.567,89»

Sin embargo también podríamos probar otro caso como el «es-US» (Español americano):

//Número que queremos formatear.
const numero = 1234567.89;
//Cadena de texto con el formato de Español americano.
const numero_formateado = numero.toLocaleString('es-US');
//Salida por consola.
console.log(numero_formateado);

En este último caso el resultado es: «1,234,567.89»

Definir cantidad de decimales

También puede suceder que queramos que nuestro número se vea siempre con dos decimales.

Para evitar esto:

//Número que queremos formatear.
const numero = 1234567.9;

O esto:

//Número que queremos formatear.
const numero = 1234567.9888;

Podemos agregar un argumento adicional al método toLocaleString() indicando el mínimo y máximo de decimales:

//Número que queremos formatear.
const numero = 1234567.9888;
//Cadena de texto con el formato de Argentina.
const numero_formateado = numero.toLocaleString('es-AR', {
  minimumFractionDigits: 2,
  maximumFractionDigits: 2
});
//Salida por consola.
console.log(numero_formateado);

Ejemplo en Python

#Número que queremos formatear.
numero = 1234567.9888
#Cadena de texto con el formato
numero_formateado = "{:,.2f}".format(numero).replace(',', 'X').replace('.', ',').replace('X', '.')
#Salida por consola.
print(numero_formateado)

Ejemplo en PHP

//Número que queremos formatear.
$numero = 1234567.9888;
//Cadena de texto con el formato.
$numero_formateado = number_format($numero, 2, ',', '.');
//Salida por el navegador.
echo $numero_formateado;