Vai al contenuto
eLearner.app
Modulo 2 · Lezione 3 di 47/32 nel corso~10 min
Lezioni del modulo (3/4)

Numeri e Math

In JavaScript esiste un solo tipo numerico: number. Sia gli interi sia i decimali (in inglese floating point) vivono lì dentro. Niente int / float separati come in altri linguaggi.

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 (!)

L'oggetto globale Math

Math non è una funzione: è un oggetto con metodi e costanti utili. Non si istanzia, si usa direttamente:

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

Numeri casuali

Math.random() restituisce un decimale fra 0 (incluso) e 1 (escluso). Per ottenere un intero in un range usi una piccola formula:

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;

I dolori dei decimali (floating point)

JS usa la rappresentazione IEEE-754 a 64 bit, condivisa con quasi tutti i linguaggi. È una rappresentazione binaria, quindi alcuni decimali non si rappresentano esattamente:

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

Soluzione standard: arrotondare con toFixed(n) (che restituisce una stringa) oppure usare interi in centesimi/millesimi quando si lavora con soldi:

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

Prova tu

Esercizio#js.m2.l3.e1
Tentativi: 0Caricamento…

Calcola l'area di un cerchio con raggio `r = 5` arrotondata alla seconda cifra decimale, come `number`. Per `r=5` ci si aspetta 78.54.

Caricamento editor…
Mostra suggerimento

Math.PI per pi greco, ** per l'elevamento; .toFixed(2) per arrotondare, Number(...) per riconvertire a number.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#js.m2.l3.e2
Tentativi: 0Caricamento…

Dati tre numeri 12, 7, 23, restituisci come ultima espressione la differenza fra il massimo e il minimo (cioè 16).

Caricamento editor…
Mostra suggerimento

Math.max e Math.min accettano più argomenti separati da virgola.

Soluzione disponibile dopo 3 tentativi