Números y Math
A diferencia de otros lenguajes, JavaScript no distingue entre enteros y decimales — todo es simplemente "Number". Eso simplifica las cosas, pero también esconde un par de sorpresas que conviene conocer desde el principio, antes de que te las encuentres tú solo en mitad de un cálculo de precios.
Un único tipo numérico
En JavaScript, 5 y 5.5
son del mismo tipo: Number. No hay un tipo aparte
para enteros como en otros lenguajes. Esto es cómodo casi siempre, pero trae
una consecuencia que sorprende a mucha gente:
No es un bug de JavaScript: es cómo cualquier ordenador representa números
decimales en binario, y le pasa a prácticamente todos los lenguajes de
programación. Para dinero o precisión exacta, redondea el resultado con
.toFixed(2) antes de mostrarlo al usuario.
NaN e Infinity
"Not a Number" — el resultado de una operación numérica que no tiene sentido, como 'hola' * 2. Dato curioso: NaN === NaN da false. Para comprobarlo, usa Number.isNaN(valor).
El resultado de dividir por 0, o de un número que se sale de rango. -Infinity también existe.
Convertir texto a número
Un dato que llega de un formulario o de una API casi siempre es texto, aunque "parezca" un número. Tienes tres formas de convertirlo:
Conversión directa. Number('42px') da NaN — no acepta texto extra.
Lee el número desde el principio y se detiene al primer carácter no numérico: da 42.
Igual que parseInt pero admite decimales: da 3.14.
El objeto Math
Redondea al entero más cercano.
Redondea hacia abajo / hacia arriba, siempre.
El mayor o menor de una lista de números.
Un decimal aleatorio entre 0 (incluido) y 1 (excluido).
Raíz cuadrada, y potencia (aunque ** ya lo hace más corto).
Combinando Math.random() con
Math.floor(), tienes la fórmula clásica para un
número entero aleatorio dentro de un rango:
No te preocupes si el ejemplo de arriba usa function
y todavía no lo has visto formalmente — lo cubrimos en detalle en el
próximo módulo. Por ahora, quédate con que Math.floor(Math.random() * n)
es la fórmula que vas a reutilizar constantemente para números aleatorios.
Comprueba lo que has aprendido
1. ¿Por qué 0.1 + 0.2 no da exactamente 0.3 en JavaScript?
2. ¿Qué devuelve parseInt('42px')?
3. ¿Qué rango de valores devuelve Math.random()?