Przejdź do głównej treści
eLearner.app
Moduł 2 · Lekcja 3 z 47/32 w kursie~10 min
Lekcje modułu (3/4)

Liczby i Math

W JavaScript istnieje tylko jeden typ liczbowy: number. Mieszkają w nim zarówno liczby całkowite, jak i dziesiętne (zmiennoprzecinkowe). Nie ma osobnych typów int / float, jak w innych językach.

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

Globalny obiekt Math

Math nie jest funkcją: to obiekt z przydatnymi metodami i stałymi. Nie tworzy się jego instancji, używa się go bezpośrednio:

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

Liczby losowe

Math.random() zwraca ułamek dziesiętny z przedziału od 0 (włącznie) do 1 (wyłącznie). Aby uzyskać liczbę całkowitą w określonym zakresie, używa się prostego wzoru:

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;

Problemy z liczbami dziesiętnymi (zmiennoprzecinkowymi)

JS używa 64-bitowej reprezentacji IEEE-754, współdzielonej z prawie wszystkimi językami. Jest to reprezentacja binarna, dlatego niektórych ułamków dziesiętnych nie da się dokładnie zapisać:

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

Standardowe rozwiązanie: zaokrąglanie za pomocą toFixed(n) (które zwraca string) lub używanie liczb całkowitych w groszach/centach/miliamperach przy pracy z pieniędzmi:

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

Spróbuj sam

Ćwiczenie#js.m2.l3.e1
Próby: 0Ładowanie...

Oblicz pole koła o promieniu `r = 5` zaokrąglone do drugiego miejsca po przecinku, jako `number`. Dla `r=5` oczekiwany wynik to 78.54.

Ładowanie edytora...
Pokaż wskazówkę

Math.PI dla pi, ** dla potęgowania; .toFixed(2) do zaokrąglenia, Number(...) do ponownej konwersji na number.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#js.m2.l3.e2
Próby: 0Ładowanie...

Mając trzy liczby 12, 7, 23, jako ostatnie wyrażenie zwróć różnicę między wartością maksymalną a minimalną (czyli 16).

Ładowanie edytora...
Pokaż wskazówkę

Math.max i Math.min przyjmują wiele argumentów oddzielonych przecinkami.

Rozwiązanie dostępne po 3 próbach