Math

Javascript udostępnia nam obiekt Math. Obiekt ten za pomocą swoich funkcjonalności ułatwia nam przeprowadzanie matematycznych operacji.
Ale jak to - tak szybko do obiektów? Obiekt Math jest tak prosty w użyciu, a i często się nam przyda, że nie ma sensu czekać z jego poznaniem.

Właściwości:

Math.E - Zwraca stałą Eulera, która wynosi ok. 2.71
Math.LN2 - Zwraca logarytm dwóch, tj. ok. 0.69
Math.LN10 - Zwraca logarytm z dziesięciu, tj. ok. 2.30
Math.LOG2E - Zwraca logarytm o podstawie 2 z liczby E, czyli ok. 1.44
Math.LOG10E - Zwraca logarytm o podstawie 10 z E, czyli ok. 0.43
Math.PI - Zwraca wartość liczby Pi, czyli ok. 3.14
Math.SQRT1_2 - Zwraca pierwiastek kwadratowy z 0.5, czyli ok. 0.70
Math.SQRT2 - Zwraca pierwiastek kwadratowy z 2, czyli ok. 1.41

Metody

Math.abs(liczba) - Zwraca wartość absolutną liczby
Math.acos(liczba) - Zwraca arcus cosinus z liczby (podanej w radianach)
Math.asin(liczba) - Zwraca arcus sinus z liczby (podanej w radianach)
Math.atan(liczba) - Zwraca arcus tangens z liczby (podanej w radianach)
Math.ceil(liczba) - Zwraca najmniejszą liczbę całkowitą, większą lub równą podanej liczbie
Math.cos(liczba) - Zwraca cosinus liczby (podanej w radianach)
Math.exp(liczba) - Zwraca wartość E podniesionej do potęgi wyrażonej podanym argumentem
Math.floor(liczba) - Zwraca największą liczbę całkowitą mniejszą lub równą podanej liczbie
Math.log(liczba) - Zwraca logarytm naturalny liczby
Math.max(liczba1, liczba2) - Zwraca większą z dwóch liczb
Math.min(liczba1, liczba2) - Zwraca mniejszą z dwóch liczb
Math.pow(liczba1, liczba2) - Zwraca wartość liczby1 podniesionej do potęgi liczby2
Math.random() - Zwraca wartość pseudolosową z przedziału 0 - 1
Math.round(liczba) - Zwraca zaokrąglenie danej liczby do najbliższej liczby całkowitej
Math.sin(liczba) - Zwraca sinus liczby (podanej w radianach)
Math.sqrt(liczba) - Zwraca pierwiastek kwadratowy liczby
Math.tan(liczba) - Zwraca tangens liczby (podanej w radianach)

Kilka przykładów zastosowania Obiektu Math (zobacz też w konsoli debugera):


const var1 = 56.5;
const var2 = 74.3;

Math.min(var1, var2) //56.5
Math.max(var1, var2)) //74.3
Math.max(1,3,6,2) //6

Math.cos(0) //1
Math.abs(-1) //1

Math.round(var1) //56
Math.round(20.52) //21
Math.round(-10.21) //-10
Math.round(-11.82) //-12

Math.floor(var1) //56
Math.floor(20.52) //20
Math.floor(-10.21) //-11
Math.floor(-11.82) //-12

Math.ceil(var1) //57
Math.ceil(20.52) //21
Math.ceil(-10.21) //-10
Math.ceil(-11.82) //-11

Losowa liczba z przedziału

Aby wygenerować liczbę losową z przedziału np. 3-7 skorzystaj z poniższego wzoru:


const min = 3;
const max = 7;

const result =  Math.floor(Math.random() * (max-min+1) + min);

Losowy kolor

Wzór podpatrzony w internecie, ale ciekawie pokazuje zastosowanie powyższych informacji. Aby wygenerować losowy kolor możemy skorzystać z wielu sposobów.


function randomColor() {
    const letters = '0123456789ABCDEF';
    let color = '#';

    for (let i = 0; i < 6; i++) {
        color += letters[Math.floor(Math.random() * 16)];
    }

    return color;
}

console.log( randomColor() );
console.log( randomColor() );
console.log( randomColor() );

Inna ciekawa sztuczka:


const color =  '#' + Math.random().toString(16).substr(2,6);

/*
Powyższe równanie możemy rozpisać na kroki:

1)
Math.random() - zwraca liczbę z przedziału 0-1
0.0264363764209139

2)
Number.toString(16) - zapisuje liczbę w danym systemie jako string
0.0264363764209139.toString(16) da nam "0.06c488cc270ee"

3)
"0.06c488cc270ee".subStr(2,6) - wycinamy litery od 3 do 7
czyli w wyniku uzyskamy "06c488"

4)
Dodajemy # i mamy kolor
"#" + "06c488" === "#06c488"
*/

Trening czyni mistrza

Poniżej zamieszczam kilka zadań, które w ramach ćwiczenia możesz wykonać:

  1. Stwórz 2 zmienne, które zawierają 2 losowe liczby.
    Za pomocą odpowiedniej metody sprawdź, która jest większa.
    
                const nr1 = Math.random()*10+1;
                const nr2 = Math.random()*10+1;
    
                if (nr1 > nr2) {
                    console.log("Liczba " + nr1 + " jest większa od liczby " + nr2);
                } else if (nr2 > nr1) {
                    console.log("Liczba " + nr2 + " jest większa od liczby " + nr1);
                } else {
                    console.log("Obie liczby są równe", nr1, nr2);
                }
    
                //lub
                console.log(Math.max(nr1, nr2));
                
  2. Obie liczby z punktu pierwszego zaokrąglij w górę i w dół.
    
                const nr1 = Math.random()*10+1;
                const nr2 = Math.random()*10+1;
    
                console.log(nr1, Math.ceil(nr1), Math.floor(nr1));
                console.log(nr2, Math.ceil(nr2), Math.floor(nr2));