¿Cómo formatear números en notación científica?
Aprende a mostrar números muy grandes y muy pequeños en JavaScript
Introducción
La notación científica expresa números como un coeficiente multiplicado por una potencia de 10. Por ejemplo, 123.000.000 se convierte en 1,23 × 10^8, y 0,000000456 se convierte en 4,56 × 10^-7. Este formato hace que los números extremadamente grandes y extremadamente pequeños sean más fáciles de leer y comparar.
Las aplicaciones web que muestran datos científicos, información financiera o mediciones técnicas a menudo necesitan formatear números de esta manera. JavaScript proporciona soporte integrado para la notación científica a través de la API Intl.NumberFormat, que maneja tanto el formateo como la localización.
Este artículo te muestra cómo formatear números en notación científica, controlar la precisión, entender las diferencias específicas de cada localización y elegir entre notación científica y de ingeniería.
Formatear números en notación científica
El constructor Intl.NumberFormat acepta una opción notation que controla cómo se muestran los números. Establecer notation en "scientific" formatea los números en notación científica.
const formatter = new Intl.NumberFormat('en-US', {
notation: 'scientific'
});
console.log(formatter.format(987654321));
// Resultado: 9.877E8
El resultado 9.877E8 representa 9,877 × 10^8. La E separa el coeficiente del exponente.
Formatear números muy grandes
La notación científica simplifica la visualización de números muy grandes expresándolos como un coeficiente y un exponente.
const formatter = new Intl.NumberFormat('en-US', {
notation: 'scientific'
});
console.log(formatter.format(6.02214076e23));
// Resultado: 6.022E23
console.log(formatter.format(299792458));
// Resultado: 2.998E8
console.log(formatter.format(7800000000));
// Resultado: 7.8E9
El número 6,02214076e23 (constante de Avogadro) se formatea como 6.022E23, lo que lo hace más fácil de leer que 602.214.076.000.000.000.000.000.
Formatear números muy pequeños
La notación científica también funciona para números muy pequeños, utilizando exponentes negativos para representar valores menores que 1.
const formatter = new Intl.NumberFormat('en-US', {
notation: 'scientific'
});
console.log(formatter.format(0.000000001));
// Resultado: 1E-9
console.log(formatter.format(0.00000000000000000016));
// Resultado: 1.6E-19
console.log(formatter.format(0.0000000456));
// Resultado: 4.56E-8
El número 0,00000000000000000016 (carga aproximada de un electrón en culombios) se formatea como 1.6E-19, evitando la necesidad de contar ceros.
El formato de notación científica varía según la configuración regional
Diferentes configuraciones regionales utilizan diferentes separadores decimales en la notación científica. Mientras que el separador de exponente sigue siendo E en la mayoría de las configuraciones regionales basadas en latín, el separador decimal en el coeficiente sigue las convenciones de la configuración regional.
const numberToFormat = 987654321;
// El inglés estadounidense usa un punto como separador decimal
const usFormatter = new Intl.NumberFormat('en-US', {
notation: 'scientific'
});
console.log(usFormatter.format(numberToFormat));
// Resultado: 9.877E8
// El portugués usa una coma como separador decimal
const ptFormatter = new Intl.NumberFormat('pt-PT', {
notation: 'scientific'
});
console.log(ptFormatter.format(numberToFormat));
// Resultado: 9,877E8
// El alemán también usa una coma como separador decimal
const deFormatter = new Intl.NumberFormat('de-DE', {
notation: 'scientific'
});
console.log(deFormatter.format(numberToFormat));
// Resultado: 9,877E8
La configuración regional del inglés estadounidense produce 9.877E8 con un punto, mientras que las configuraciones regionales portuguesa y alemana producen 9,877E8 con una coma.
Control de precisión en notación científica
Las opciones minimumSignificantDigits y maximumSignificantDigits controlan cuántos dígitos aparecen en el resultado formateado. Los dígitos significativos incluyen todos los dígitos en el coeficiente, desde el primer dígito no cero hasta el último dígito.
const formatter = new Intl.NumberFormat('en-US', {
notation: 'scientific',
minimumSignificantDigits: 3,
maximumSignificantDigits: 3
});
console.log(formatter.format(123456789));
// Resultado: 1.23E8
console.log(formatter.format(0.00045678));
// Resultado: 4.57E-4
Establecer ambas opciones en 3 limita el resultado a exactamente tres dígitos significativos. Sin estas opciones, el formateador incluye más dígitos del número original.
También puedes establecer valores mínimos y máximos diferentes para permitir una precisión variable.
const formatter = new Intl.NumberFormat('en-US', {
notation: 'scientific',
minimumSignificantDigits: 2,
maximumSignificantDigits: 5
});
console.log(formatter.format(123456789));
// Resultado: 1.2346E8
console.log(formatter.format(100000000));
// Resultado: 1.0E8
Esta configuración permite entre 2 y 5 dígitos significativos, dependiendo del número de entrada.
Formatear números en notación ingenieril
La notación ingenieril es una variante de la notación científica donde el exponente siempre es un múltiplo de 3. Esto se alinea con los prefijos métricos del SI como kilo (10^3), mega (10^6) y giga (10^9).
const formatter = new Intl.NumberFormat('en-US', {
notation: 'engineering'
});
console.log(formatter.format(987654321));
// Salida: 987.654E6
console.log(formatter.format(0.000000456));
// Salida: 456E-9
El número 987.654.321 se formatea como 987.654E6 en notación ingenieril, en comparación con 9.877E8 en notación científica. El exponente 6 es un múltiplo de 3.
Diferencias entre notación científica e ingenieril
La principal diferencia entre la notación científica y la ingenieril es cómo eligen el exponente. La notación científica utiliza cualquier exponente entero, mientras que la notación ingenieril restringe los exponentes a múltiplos de 3.
const scientificFormatter = new Intl.NumberFormat('en-US', {
notation: 'scientific'
});
const engineeringFormatter = new Intl.NumberFormat('en-US', {
notation: 'engineering'
});
const testNumbers = [105900, 1234567, 0.00045];
testNumbers.forEach(num => {
console.log(`Number: ${num}`);
console.log(`Scientific: ${scientificFormatter.format(num)}`);
console.log(`Engineering: ${engineeringFormatter.format(num)}`);
console.log('---');
});
// Salida:
// Number: 105900
// Scientific: 1.059E5
// Engineering: 105.9E3
// ---
// Number: 1234567
// Scientific: 1.235E6
// Engineering: 1.235E6
// ---
// Number: 0.00045
// Scientific: 4.5E-4
// Engineering: 450E-6
// ---
Para 105.900, la notación científica produce 1.059E5 mientras que la notación ingenieril produce 105.9E3. Cuando la notación científica ya utiliza un múltiplo de 3 (como con 1.234.567 produciendo 1.235E6), ambas notaciones producen el mismo resultado.
Casos de uso para notación científica e ingenieril
La notación científica funciona bien para aplicaciones que muestran datos donde la legibilidad y consistencia importan más que la alineación con prefijos métricos.
Utilice notación científica para:
- Calculadoras científicas y herramientas de cómputo
- Aplicaciones de astronomía (distancias, masas, luminosidades)
- Aplicaciones de química (masas moleculares, concentraciones)
- Simulaciones de física (masas de partículas, valores electromagnéticos)
La notación ingenieril funciona bien para aplicaciones donde los usuarios piensan en términos de prefijos métricos o necesitan comunicar valores verbalmente.
Utilice notación ingenieril para:
- Aplicaciones de electrónica (resistencias en kiloohmios, capacitancias en picofaradios)
- Herramientas de ingeniería eléctrica (voltajes, corrientes, potencias)
- Sistemas de telecomunicaciones (frecuencias en megahercios, tasas de datos en gigabits)
- Ingeniería mecánica (fuerzas en kilonewtons, pares en newton-metros)
La elección depende de sus usuarios y dominio. La notación científica proporciona un formato consistente en todos los números, mientras que la notación ingenieril se alinea con la forma en que los ingenieros comunican las mediciones.