Lecciones del módulo (3/4)
Números y Math
En JavaScript existe un solo tipo numérico: number. Tanto los enteros
como los decimales (en inglés floating point) viven allí dentro. No hay tipos
int / float separados como en otros lenguajes.
typeof 42; // 'number'
typeof 3.14; // 'number'
typeof -0.001; // 'number'
typeof Infinity; // 'number' ← Infinity è un number speciale
typeof NaN; // 'number' ← anche "Not a Number" è un number (!)El objeto global Math
Math no es una función: es un objeto con métodos y constantes útiles. No
se instancia, se usa directamente:
Math.min(3, 1, 7); // 1
Math.max(3, 1, 7); // 7
Math.abs(-5); // 5
Math.round(4.5); // 5
Math.floor(4.9); // 4 (arrotonda sempre per difetto)
Math.ceil(4.1); // 5 (arrotonda sempre per eccesso)
Math.sqrt(16); // 4
Math.pow(2, 10); // 1024 (equivalente a 2 ** 10)
Math.PI; // 3.141592653589793Números aleatorios
Math.random() devuelve un decimal entre 0 (incluido) y 1 (excluido).
Para obtener un entero en un rango se usa una pequeña fórmula:
// Intero casuale fra 0 e 9
Math.floor(Math.random() * 10);
// Intero casuale fra 1 e 6 (un dado a sei facce)
Math.floor(Math.random() * 6) + 1;Las dificultades de los decimales (floating point)
JS usa la representación IEEE-754 de 64 bits, compartida con casi todos los lenguajes. Es una representación binaria, por lo que algunos decimales no se pueden representar exactamente:
0.1 + 0.2; // 0.30000000000000004 (!)
0.1 + 0.2 === 0.3; // falseSolución estándar: redondear con toFixed(n) (que devuelve una cadena)
o usar enteros en céntimos/milésimas al trabajar con dinero:
(0.1 + 0.2).toFixed(2); // '0.30' (stringa)
Number((0.1 + 0.2).toFixed(2)); // 0.3 (number)Pruébalo tú mismo
Calcula el área de un círculo con radio `r = 5` redondeada a la segunda cifra decimal, como `number`. Para `r=5` se espera 78.54.
Mostrar pista
Math.PI para pi, ** para la potencia; .toFixed(2) para redondear, Number(...) para volver a convertir a number.
Solución disponible después de 3 intentos
Ejercicio de repaso
Dados tres números 12, 7, 23, devuelve como última expresión la diferencia entre el máximo y el mínimo (es decir, 16).
Mostrar pista
Math.max y Math.min aceptan múltiples argumentos separados por comas.
Solución disponible después de 3 intentos