Cómo agregar espacios o comas al formatear números en JavaScript: guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Cómo agregar comas al formatear números en JavaScript? Guía detallada

\n\n

¿Alguna vez te has preguntado por qué 1000000 es difícil de leer, mientras que 1,000,000 se entiende al instante? El ojo humano simplemente no está diseñado para largas secuencias de dígitos. Los separadores de miles (comas, espacios o puntos) no son solo una cuestión de estética, sino de usabilidad y percepción de la información.

\n\n

Si programas en JavaScript y trabajas con precios, estadísticas, IDs o cualquier dato numérico, tarde o temprano surgirá la pregunta: «¿Cómo formatear un número agregando comas o espacios entre los millares?». En Stack Overflow, esta pregunta ha acumulado miles de visitas, lo que demuestra que preocupa a muchos.

\n\n

En este artículo no solo te daremos código listo para usar. Analizaremos tres métodos principales: desde la API moderna integrada hasta las expresiones regulares clásicas. Aprenderás cómo hacer que JavaScript «hable» el idioma de los números legibles. ¡Allá vamos!

\n\n

¿Por qué un número simple es un problema?

\n\n

Imagina que muestras en un sitio web: Precio: 1234567.89 €. El ojo se tropieza. ¿Cuánto es? ¿Un millón? ¿Doce millones? Pero si agregas comas: 1,234,567.89 — queda claro de inmediato: un poco más de un millón.

\n\n

En JavaScript, un número es simplemente un Number. No tiene un «formato de visualización» incorporado. Todo lo que vemos es el resultado de convertirlo a cadena. Y aquí es donde entramos nosotros, los desarrolladores.

\n\n

Método 1: toLocaleString() — el rey de la simplicidad

\n\n

La forma más elegante y moderna es usar el método toLocaleString(). Está disponible en cualquier número de JavaScript y permite tener en cuenta la configuración regional del usuario.

\n\n
const number = 1234567.89;\nconst formatted = number.toLocaleString('es-ES');\nconsole.log(formatted); // "1.234.567,89"\n
\n\n

Observa: para la configuración regional de España (es-ES), el separador de miles es el punto y el separador decimal es la coma. Para la de Estados Unidos (en-US), son la coma y el punto:

\n\n
console.log(number.toLocaleString('en-US')); // "1,234,567.89"\n
\n\n

Ventajas:

\n
    \n
  • Mínimo código.
  • \n
  • Respeta los estándares locales (espacios, puntos, comas).
  • \n
  • Funciona en todos los navegadores modernos y Node.js.
  • \n
\n\n

Desventajas:

\n
    \n
  • Menos control sobre el formato (no se puede simplemente reemplazar un espacio por una coma sin manipulaciones adicionales).
  • \n
  • Los navegadores antiguos (IE11) pueden no soportar el segundo argumento (locales).
  • \n
\n\n

Método 2: Intl.NumberFormat — flexibilidad y potencia

\n\n

Si necesitas control total, usa el objeto Intl.NumberFormat. Es el mismo mecanismo que toLocaleString(), pero con opciones avanzadas.

\n\n
const formatter = new Intl.NumberFormat('es-ES', {\n    style: 'decimal',\n    useGrouping: true, // Activa los separadores de miles\n    minimumFractionDigits: 2,\n    maximumFractionDigits: 2\n});\n\nconsole.log(formatter.format(1234567.8)); // "1.234.567,80"\n
\n\n

¿Quieres moneda? Fácil:

\n\n
const currencyFormatter = new Intl.NumberFormat('es-ES', {\n    style: 'currency',\n    currency: 'USD',\n    minimumFractionDigits: 0\n});\nconsole.log(currencyFormatter.format(1000000)); // "1.000.000 $"\n
\n\n

¿Se puede cambiar el separador de miles manualmente? No hay una opción directa, pero se puede hacer un replace:

\n\n
let result = formatter.format(1234567.89);\nresult = result.replace(/\\./g, ','); // Reemplazamos puntos por comas\nconsole.log(result); // "1,234,567,80"\n
\n\n

Ventajas:

\n
    \n
  • Máxima flexibilidad (moneda, porcentajes, unidades de medida).
  • \n
  • Rendimiento (se puede crear una vez y reutilizar).
  • \n
\n\n

Desventajas:

\n
    \n
  • Un poco más de código que toLocaleString().
  • \n
  • Sigue dependiendo de la configuración regional.
  • \n

Blogs

Book Recommendations