¿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 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 configuración regional y elegir entre notación científica e ingenieril.

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));
// Output: 9.877E8

La salida 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 al expresarlos como un coeficiente y un exponente.

const formatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific'
});

console.log(formatter.format(6.02214076e23));
// Output: 6.022E23

console.log(formatter.format(299792458));
// Output: 2.998E8

console.log(formatter.format(7800000000));
// Output: 7.8E9

El número 6,02214076e23 (constante de Avogadro) se formatea como 6.022E23, haciéndolo 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, usando exponentes negativos para representar valores menores que 1.

const formatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific'
});

console.log(formatter.format(0.000000001));
// Output: 1E-9

console.log(formatter.format(0.00000000000000000016));
// Output: 1.6E-19

console.log(formatter.format(0.0000000456));
// Output: 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

Las diferentes configuraciones regionales usan diferentes separadores decimales en notación científica. Mientras que el separador de exponente permanece como E en la mayoría de las configuraciones regionales basadas en latín, el separador decimal en el coeficiente sigue las convenciones de cada configuración regional.

const numberToFormat = 987654321;

// US English uses a period as the decimal separator
const usFormatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific'
});
console.log(usFormatter.format(numberToFormat));
// Output: 9.877E8

// Portuguese uses a comma as the decimal separator
const ptFormatter = new Intl.NumberFormat('pt-PT', {
  notation: 'scientific'
});
console.log(ptFormatter.format(numberToFormat));
// Output: 9,877E8

// German also uses a comma as the decimal separator
const deFormatter = new Intl.NumberFormat('de-DE', {
  notation: 'scientific'
});
console.log(deFormatter.format(numberToFormat));
// Output: 9,877E8

La configuración regional de inglés estadounidense produce 9.877E8 con un punto, mientras que las configuraciones regionales de portugués y alemán producen 9,877E8 con una coma.

Controlar la precisión en notación científica

Las opciones minimumSignificantDigits y maximumSignificantDigits controlan cuántos dígitos aparecen en la salida formateada. Los dígitos significativos incluyen todos los dígitos del coeficiente, desde el primer dígito distinto de cero hasta el último dígito.

const formatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific',
  minimumSignificantDigits: 3,
  maximumSignificantDigits: 3
});

console.log(formatter.format(123456789));
// Output: 1.23E8

console.log(formatter.format(0.00045678));
// Output: 4.57E-4

Establecer ambas opciones en 3 limita la salida 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 precisión variable.

const formatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific',
  minimumSignificantDigits: 2,
  maximumSignificantDigits: 5
});

console.log(formatter.format(123456789));
// Output: 1.2346E8

console.log(formatter.format(100000000));
// Output: 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 es siempre 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));
// Output: 987.654E6

console.log(formatter.format(0.000000456));
// Output: 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 usa 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('---');
});

// Output:
// 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 usa 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 la consistencia importan más que la alineación con prefijos métricos.

Usa la notación científica para:

  • Calculadoras científicas y herramientas de cálculo
  • 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 de ingeniería funciona bien para aplicaciones donde los usuarios piensan en términos de prefijos métricos o necesitan comunicar valores verbalmente.

Usa la notación de ingeniería para:

  • Aplicaciones de electrónica (resistencias en kilohmios, 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, torques en newton-metros)

La elección depende de tus usuarios y dominio. La notación científica proporciona formato consistente en todos los números, mientras que la notación de ingeniería se alinea con cómo los ingenieros comunican las mediciones.