Saltar al contenido principal
eLearner.app
Módulo 2 · Lección 3 de 47/32 en el curso~10 min
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.

JS
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:

JS
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.141592653589793

Nú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:

JS
// 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:

JS
0.1 + 0.2; // 0.30000000000000004 (!)
0.1 + 0.2 === 0.3; // false

Solución estándar: redondear con toFixed(n) (que devuelve una cadena) o usar enteros en céntimos/milésimas al trabajar con dinero:

JS
(0.1 + 0.2).toFixed(2); // '0.30' (stringa)
Number((0.1 + 0.2).toFixed(2)); // 0.3 (number)

Pruébalo tú mismo

Ejercicio#js.m2.l3.e1
Intentos: 0Cargando...

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.

Cargando editor...
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

Ejercicio#js.m2.l3.e2
Intentos: 0Cargando...

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).

Cargando editor...
Mostrar pista

Math.max y Math.min aceptan múltiples argumentos separados por comas.

Solución disponible después de 3 intentos