Números en JavaScript Moderno
En JavaScript, existen dos tipos principales de números:
- Números regulares: Se almacenan usando el formato de 64 bits IEEE-754, conocido como “números de coma flotante de doble precisión”. Estos son los números que se utilizan con más frecuencia y son el foco principal de este capítulo.
- BigInt: Representan enteros con longitud arbitraria. Son necesarios en situaciones donde los números regulares no pueden manejar valores superiores a 2^53 o inferiores a -2^53 con precisión. Los BigInt tienen un capítulo dedicado.
Formatos para Escribir Números
Notación estándar y separadores
Un número grande como mil millones puede escribirse de la forma convencional:
let billion = 1000000000;
También es posible usar guiones bajos para mejorar la legibilidad:
let billion = 1_000_000_000;
Los guiones bajos son ignorados por el motor de JavaScript y sirven únicamente para facilitar la lectura del código.
Notación científica
Para evitar escribir largas cadenas de ceros, JavaScript permite usar la notación científica agregando la letra «e» seguida del número de ceros:
let billion = 1e9; // 1 y 9 ceros
alert(7.3e9); // 7.3 mil millones
Un número pequeño, como un microsegundo, puede escribirse así:
let microsecond = 0.000001;
O utilizando «e» para evitar ceros:
let microsecond = 1e-6; // 1 y seis ceros
Sistemas Numéricos
JavaScript soporta varios sistemas numéricos, incluyendo hexadecimales, binarios y octales:
Hexadecimal: Prefijo
0x
alert(0xff); // 255
Binario: Prefijo 0b
let binary = 0b11111111; // 255
Octal: Prefijo 0o
let octal = 0o377; // 255
Conversión de Números
El método num.toString(base)
convierte un número en una cadena en la base especificada:
let num = 255;
alert(num.toString(16)); // "ff"
alert(num.toString(2)); // "11111111"
Las bases pueden variar entre 2 y 36. Los usos comunes incluyen:
- Base 16: Para colores, codificación de caracteres.
- Base 2: Para operaciones bit a bit.
- Base 36: Para acortar identificadores largos.
Redondeo
Hay varias funciones incorporadas para redondear números:
Math.floor
: Redondea hacia abajo.Math.ceil
: Redondea hacia arriba.Math.round
: Redondea al entero más cercano.Math.trunc
: Elimina la parte decimal.
Ejemplo:
let num = 1.23456;
alert(Math.round(num * 100) / 100); // 1.23
El método toFixed(n)
redondea el número a n
dígitos después del punto decimal y devuelve una cadena:
let num = 12.34;
alert(num.toFixed(1)); // "12.3"
Precisión Numérica
Los números en JavaScript pueden perder precisión debido a su representación en formato de 64 bits IEEE-754:
alert(0.1 + 0.2 == 0.3); // false
alert(0.1 + 0.2); // 0.30000000000000004
Para evitar problemas con la precisión, se puede usar toFixed
:
let sum = 0.1 + 0.2;
alert(sum.toFixed(2)); // "0.30"
Valores Especiales
- Infinity y NaN son valores especiales.
isFinite(value)
yisNaN(value)
verifican estos valores. Number.isNaN
yNumber.isFinite
son versiones más estrictas que no convierten el argumento a número.
Comparación con Object.is
El método Object.is
compara valores de manera más confiable que ===
para ciertos casos extremos:
Object.is(NaN, NaN)
estrue
.Object.is(0, -0)
esfalse
.
parseInt y parseFloat
Estas funciones convierten cadenas a números:
alert(parseInt('100px')); // 100
alert(parseFloat('12.5em')); // 12.5
parseInt
puede recibir una base opcional:
alert(parseInt('0xff', 16)); // 255
Funciones Matemáticas
JavaScript tiene un objeto Math
con funciones y constantes matemáticas útiles:
Math.random()
: Devuelve un número aleatorio entre 0 y 1.Math.max(a, b, ...)
yMath.min(a, b, ...)
: Devuelven el mayor y menor de una lista de números.Math.pow(n, exp)
: Calculan
elevado aexp
.
Resumen
- Usar notación científica con «e» para números grandes o pequeños.
- Soporte para números en bases hexadecimal, binaria y octal.
- Conversión de números a diferentes bases con
toString(base)
. - Redondeo con
Math.floor
,Math.ceil
,Math.trunc
,Math.round
ytoFixed
. - Precaución con la precisión numérica en operaciones decimales.
- Uso de
isFinite
yisNaN
para validar números. - Conversión de cadenas con
parseInt
yparseFloat
. - Funciones matemáticas adicionales en el objeto
Math
.