Formateador de números
Formatea números con comas, abreviaturas, símbolos monetarios y decimales personalizados.
Cómo funciona
- Introduce tu número: escribe o pega un valor numérico, enteros, decimales, números grandes o notación científica.
- Elige las opciones de formato: selecciona tu idioma (EE. UU., UE, etc.), el número de decimales, el separador de agrupación y el símbolo monetario si es necesario.
- Copia el resultado formateado: el número se muestra en el formato elegido al instante. Cópialo para usar en informes, documentos o exportaciones.
¿Por qué usar el formateador de números?
Los números significan cosas distintas según los idiomas. Estados Unidos escribe mil como 1,000.00 mientras que muchos países europeos lo escriben 1.000,00. Copiar números en bruto entre sistemas provoca errores de análisis, malas lecturas y errores financieros. El formateador de números garantiza que tus números se muestren correctamente para cualquier audiencia, preparación de informes financieros, localización de contenido o limpieza de datos para presentar.
Funcionalidades
- Formato adaptado al idioma: admite formatos de EE. UU., Europa e internacionales con separadores decimales y de agrupación correctos.
- Control de precisión de decimales: define exactamente cuántos decimales mostrar.
- Agrupación de miles: añade o retira los separadores de miles con un clic.
- Formato monetario: prefija un símbolo monetario y da formato como valor monetario.
- Notación científica: convierte de o a notación científica para números muy grandes o muy pequeños.
Preguntas frecuentes
¿Cuál es la diferencia entre el formato numérico de EE. UU. y el europeo?
En Estados Unidos, el separador decimal es el punto (.) y el separador de miles es la coma (,), p. ej. 1,234.56. En la mayor parte de Europa, es al revés: 1.234,56. Esta herramienta convierte correctamente entre ambos formatos.
¿Puedo formatear números para divisas?
Sí. Activa el modo monetario y elige un símbolo ($ € £ ¥, etc.) para prefijarlo al número formateado. Para formatos contables con convenciones de números negativos, activa el modo contable.
¿Gestiona números muy grandes o muy pequeños?
Sí. El formateador gestiona números de múltiples cifras y puede mostrarlos en notación estándar, agrupada o científica. La precisión en coma flotante se aplica a los decimales configurados.
De dónde vienen los estándares de formato de números
Los formatos numéricos que ves hoy en el software están definidos por una pequeña pila de estándares que tardó treinta años en consolidarse. IEEE 754 (1985), revisado en 2008 y 2019, fijó la disposición binaria de los números de punto flotante: 64 bits divididos en 1 signo, 11 exponente, 52 mantisa, que es lo que cada número JavaScript es bajo el capó. ISO 4217 (1978, edición actual 2015) definió los códigos de divisa de tres letras, USD, EUR, JPY, INR, BRL, y cuántas unidades menores tiene cada uno (2 para USD, 0 para JPY, 3 para KWD, 4 para CLF). El Unicode CLDR (Common Locale Data Repository), publicado por primera vez en 2003, es el conjunto de datos abierto que registra separadores de grupo, separadores decimales, símbolos de moneda y reglas de plural para cada locale; la versión actual es CLDR 46 (octubre de 2024). ECMA-402 (2012), la API de Internacionalización de ECMAScript, dio a JavaScript un enlace nativo a esos datos a través de Intl.NumberFormat, que está respaldado por ICU (International Components for Unicode) en V8, JavaScriptCore y SpiderMonkey. Juntos esos cuatro specs hacen que (1234567).toLocaleString('de-DE') devuelva 1.234.567 en lugar de 1,234,567.
Los seis patrones de locale que encontrarás
La mayoría de formatos numéricos en la naturaleza caen en seis patrones. Memorizar estos seis cubre ~95% de la base de usuarios de cualquier producto global.
- en-US, en-GB, ja-JP, zh-CN, ko-KR, grupo coma, decimal punto:
1,234,567.89. - de-DE, es-ES, it-IT, nl-NL, pt-BR, grupo punto, decimal coma:
1.234.567,89. Cuidado al pegar esto en una hoja de cálculo estadounidense. - fr-FR, ru-RU, sv-SE, pl-PL, grupo espacio estrecho sin ruptura (Unicode U+202F), decimal coma:
1 234 567,89. El separador no es un espacio regular; copiar y pegar a través de sistemas que normalizan espacios lo corromperá. - de-CH, grupo comilla simple derecha (U+2019), decimal punto:
1’234’567.89. Suiza es única aquí. - en-IN, hi-IN, grupo coma, decimal punto, pero el agrupamiento es 2-2-3 en lugar de 3-3-3:
12,34,567.89. Esto refleja el sistema lakh/crore: 1 lakh = 10⁵, 1 crore = 10⁷. - ar-EG, ar-SA, dígitos arábigo-índicos (٠١٢٣٤٥٦٧٨٩), decimal árabe U+066B, separador de miles árabe U+066C:
١٬٢٣٤٬٥٦٧٫٨٩. La mayoría de entornos de desarrollo arabófonos usan dígitos latinos internamente y solo cambian para mostrar.
Modos de redondeo, qué hacen realmente
ECMA-402 (2023) añadió nueve modos de redondeo a Intl.NumberFormat. La elección cambia totales financieros, informes científicos y cálculos fiscales. Tres importan más en la práctica.
halfExpand(por defecto). 2,5 se redondea a 3, −2,5 se redondea a −3. Este es el redondeo que todos aprendieron en la escuela y el predeterminado de JavaScript.halfEven(redondeo del banquero). 2,5 se redondea a 2, 3,5 se redondea a 4, los empates siempre van al dígito par. Requerido por IEEE 754 para aritmética de punto flotante. Usado en tablas fiscales estadounidenses, computación científica y sistemas contables principales para eliminar un pequeño sesgo sistemático quehalfExpandintroduce a lo largo de millones de redondeos.trunc. Descarta todo lo que pase del corte sin redondear. 2,9 a 2, −2,9 a −2. Usado cuando literalmente quieres descartar precisión, nunca para dinero.- Los otros seis (
ceil,floor,expand,halfCeil,halfFloor,halfTrunc) manejan casos especializados como redondear siempre hacia arriba para costes de envío o siempre hacia abajo para descuentos fiscales. Elige deliberadamente, no aceptes el predeterminado si dinero o cumplimiento están en juego.
Donde esta herramienta se gana su sueldo
- Informes financieros. Formatea ingresos, gastos, ratios para presentaciones. Cambia entre formatos US y EU para corresponder al país de la audiencia.
- Verificación de locale de tu tienda. Escribe un precio en el formato que quieras y verifica que coincida con lo que tu sitio de comercio electrónico muestra para un cliente en Alemania o India.
- Preparación CSV. Convierte filas alemanas
1.234,56a US1234.56antes de importar a una hoja que espera decimal punto, o viceversa. - Formato rupia india. Convierte 12.500.000 en 1,25,00,000 (1,25 crore) para audiencias del sur de Asia. La mayoría de herramientas construidas en EE.UU. no lo hacen.
- Visualización compacta para paneles. Convierte 1.234.567 en
1.23Mpara widgets donde el espacio horizontal es escaso. La notación compacta también es locale-aware: el alemán muestra1,23 Mio. - Símbolo de moneda como prefijo. Añade $, €, £, ¥, ₹ en la posición correcta para cada locale, el dólar estadounidense va delante, el euro alemán va detrás.
- Escape de notación científica Excel. Los grandes IDs pegados como los snowflakes de Twitter se convierten en
1.23E+18y pierden precisión. Formatéalos con agrupación más apóstrofe inicial antes de pegar para que Excel los trate como texto.
Errores que muerden incluso a desarrolladores experimentados
- Aritmética de punto flotante sobre dinero.
0.1 + 0.2 === 0.30000000000000004en todo lenguaje IEEE 754, no solo JavaScript. Almacena la moneda como unidades menores enteras (céntimos) o usa una biblioteca decimal comodecimal.js. El formato oculta el error, no lo arregla. - Parsing ingenuo de cadenas de locale.
parseFloat("1,234.56")devuelve1, no1234.56.parseFloat("1.234,56")devuelve1.234. Para parsear un número formateado en locale, elimina separadores de grupo y luego reemplaza la marca decimal, idealmente impulsado porIntl.NumberFormat(locale).formatToParts(). - Pérdida de precisión en enteros grandes. Los enteros por encima de
2⁵³ − 1 = 9 007 199 254 740 991pierden silenciosamente precisión cuando se almacenan comonumber. IDs de Twitter, IDs de Stripe, hashes de transacciones blockchain todos exceden esto. Recíbelos como cadenas o usaBigInt;Intl.NumberFormatacepta BigInt nativamente. - Unidades menores estilo Stripe. Stripe envía
amount: 499para $4.99. Divide por 100 (o por el conteo de unidades menores ISO 4217 para la moneda) antes de formatear. JPY, KRW, VND, ISK, HUF usan 0 unidades menores, no se necesita división. - La entrada de porcentaje es una fracción.
new Intl.NumberFormat('en', {style: 'percent'}).format(0.5)devuelve50%, no0.5%. Multiplica tu valor almacenado por 0,01 antes de formatear si lo almacenaste como porcentaje. - Construir NumberFormat en un bucle caliente. Cada llamada al constructor carga datos de locale ICU. Reutiliza una sola instancia entre llamadas: 1M de formatos con una instancia en caché tarda ~60 ms en V8, ~3 s si construyes desde cero cada vez.
- JPY con dos decimales.
¥1000.00está mal porque JPY tiene 0 unidades menores. PonminimumFractionDigits: 0, maximumFractionDigits: 0para JPY, KRW, VND, ISK, HUF, CLP.
Más preguntas frecuentes
¿Por qué 0,1 + 0,2 no es igual a 0,3?
Porque los flotantes binarios IEEE 754 no pueden almacenar la fracción decimal 0,1 exactamente, de la misma forma que la base 10 no puede almacenar 1/3 exactamente. El doble de 64 bits más cercano a 0,1 es aproximadamente 0,1000000000000000055511151231257827021181583404541015625. Sumar dos tales aproximaciones produce un resultado que se redondea a 0,30000000000000004 en lugar de 0,3. Cada lenguaje IEEE 754 tiene este comportamiento: Java, Python, C++, Swift, todos. Para aritmética decimal exacta, usa céntimos enteros o una biblioteca como decimal.js / Decimal de Python / BigDecimal de Java.
¿Cuál es la diferencia entre Intl.NumberFormat y toLocaleString?
Mismo motor, ergonomía diferente. (1234.5).toLocaleString('de-DE', {style: 'currency', currency: 'EUR'}) y new Intl.NumberFormat('de-DE', {style: 'currency', currency: 'EUR'}).format(1234.5) producen salida idéntica. La diferencia: Intl.NumberFormat es reutilizable, así que si formateas muchos números con las mismas opciones, instancia una vez y cachea. toLocaleString lee las opciones del constructor en cada llamada y es dramáticamente más lento en bucles apretados.
¿Cómo funciona el sistema de numeración indio?
El inglés indio y el hindi agrupan dígitos en patrón 2-2-3 en lugar de 3-3-3: los tres dígitos más a la derecha, luego grupos de dos. 100.000 se escribe 1,00,000 y se llama un lakh (10⁵). 10.000.000 se escribe 1,00,00,000 y se llama un crore (10⁷). Intl.NumberFormat('en-IN').format(12345678) devuelve 1,23,45,678. El sistema se extiende a arab (10⁹) y kharab (10¹¹) aunque sean raros en uso moderno.
¿Qué tamaño de número puede manejar esta herramienta?
Hasta Number.MAX_SAFE_INTEGER = 2⁵³ − 1 = 9.007.199.254.740.991, cualquier entero sobrevive un viaje de ida y vuelta exactamente. Más allá de eso, la precisión empieza a filtrarse. JSON.parse("9007199254740993") devuelve 9007199254740992, el doble representable más cercano. Para valores mayores, pégalos como literales BigInt (con una n al final) o trátalos como cadenas. El formateador acepta ambos.
¿Se envía mi número a alguna parte?
No. Intl.NumberFormat y los datos de locale se incluyen con tu navegador; toda la canalización se ejecuta localmente. Abre la pestaña Red en DevTools y formatea un número, verás cero solicitudes salientes. Seguro para salarios, ingresos, saldos de cuenta, o cualquier dato que no pegarías en un servicio alojado.