Obiekt Math przechowuje wartości matematyczne, zgromadzone jako własności i metody tego obiektu.
Przykładem takich metod jest funkcja Cosinus, lub np wartość Pi.
| E | - Zwraca stałą Eulera, która wynosi ok. 2.71 | |
| LN2 | - Zwraca logarytm dwóch, tj. ok. 0.69 | |
| LN10 | - Zwraca logarytm z dziesięciu, tj. ok. 2.30 | |
| LOG2E | - Zwraca logarytm o podstawie 2 z liczby E, czyli ok. 1.44 | |
| LOG10E | - Zwraca logarytm o podstawie 10 z E, czyli ok. 0.43 | |
| PI | - Zwraca wartość liczby Pi, czyli ok. 3.14 | |
| SQRT1_2 | - Zwraca pierwiastek kwadratowy z 0.5, czyli ok. 0.70 | |
| SQRT2 | - Zwraca pierwiastek kwadratowy z 2, czyli ok. 1.41 |
| abs(liczba) | - Zwraca wartość absolutną liczby |
| acos(liczba) | - Zwraca arcus cosinus z liczby (podanej w radianach) |
| asin(liczba) | - Zwraca arcus sinus z liczby (podanej w radianach) |
| atan(liczba) | - Zwraca arcus tangens z liczby (podanej w radianach) |
| ceil(liczba) | - Zwraca najmniejszą liczbę całkowitą, większą lub równą podanej liczbie |
| cos(liczba) | - Zwraca cosinus liczby (podanej w radianach) |
| exp(liczba) | - Zwraca wartość E podniesionej do potęgi wyrażonej podanym argumentem |
| floor(liczba) | - Zwraca największą liczbę całkowitą mniejszą lub równą podanej liczbie |
| log(liczba) | - Zwraca logarytm naturalny liczby |
| max(liczba1,liczba2) | - Zwraca większą z dwóch liczb |
| min(liczba1,liczba2) | - Zwraca mniejszą z dwóch liczb |
| pow(liczba1,liczba2) | - Zwraca wartość liczby1 podniesionej do potęgi liczby2 |
| random() | - Zwraca wartość pseudolosową z przedziału 0 - 1 |
| round(liczba) | - Zwraca zaokrąglenie danej liczby do najbliższej liczby całkowitej |
| sin(liczba) | - Zwraca sinus liczby (podanej w radianach) |
| sqrt(liczba) | - Zwraca pierwiastek kwadratowy liczby |
| tan(liczba) | - Zwraca tangens liczby (podanej w radianach) |
Kilka przykładów zastosowania Obiektu Math:
var zmienna1 = 56.5; var zmienna2 = 74.3; document.write( Math.min(zmienna1,zmienna2) ); //wypisze sie 56.5 document.write( Math.round(Math.min(zmienna1,zmienna2)) ); //wypisze sie 57 document.write( Math.cos(0) ) //wypisze sie 1 Math.round(zmienna1) // da w rezultacie 56 Math.round(20.52) // da w rezultacie 21 Math.round(-10.21) // da w rezultacie -10 Math.round(-11.82) // da w rezultacie -12 Math.floor(zmienna1) // da w rezultacie 56 Math.floor(20.52) // da w rezultacie 20 Math.floor(-10.21) // da w rezultacie -11 Math.floor(-11.82) // da w rezultacie -12 Math.ceil(zmienna1) // da w rezultacie 57 Math.ceil(20.52) // da w rezultacie 21 Math.ceil(-10.21) // da w rezultacie -10 Math.ceil(-11.82) // da w rezultacie -11
Przykład wykorzystania Javascriptu do obliczania punktów zerowych funkcji:
//funkcja: f(x) = 4x2 + 10x + 4
var a = 4
var b = 10
var c = 4
var Delta = Math.pow(b,2) - (4*a*c) //obliczamy Deltę
var sqrtDelta = Math.sqrt(Delta); //oblicamy pierwiastek Delty
var x1 = (-b - pier) / (2*a); //obliczamy pierwsze miejsce zerowe
var x2 = (-b + pier) / (2*a); //obczliamy drugie miejsce zerowe
document.write('Delta = ' +Delta+ '<BR>');
document.write('Pierwiastek Delty = ' +sqrtDelta+ '<BR>');
document.write('x1 = ' +x1);
document.write('x2 = ' +x1);
Dodatkowo Javascript udostępnia nam specjalny obiekt Number, który posiada takie właściwości jak maksymalna wartość, minimalna wartość itp. Więcej na jego temat możesz dowiedzieć się tutaj.
Można by pomyśleć, że wymnożenie w JavaScripcie liczby 1,15 przez 3 nie powinno być wielkim wyzwaniem, gdyż wszyscy doskonale wiemy, że jest to po prostu 3,45. Proste, logiczne. Jednak nie do końca. Okazuje się, że w Javascript niektóre równania dają dość zaskakujące wyniki:
document.write( 1,15 * 3 ) //wypisze się 3.4499999999999997 document.write( 0.119 * 100 ) //wypisze się 11.899999 document.write( 51.02 - 3.8 ) //wypisze się 47.220000000000006
Jest to spowodowane specyfikacją ECMA, oraz specyficznym sposobem mnożenia.
Skąd się biorą takie cuda?
JavaScript przechowuje liczby zmiennoprzecinkowe jako liczby 64 bitowe zgodne ze standardem IEEE 754. Z powodu takiego właśnie zapisu w pewnych sytuacjach mogą pojawiać się takie różnice. W celu uzyskania bliższych informacji na ten temat warto zajrzeć pod adres:
http://www.psc.edu/general/software/packages/ieee/ieee.html
Niezależnie od tego, jaka jest przyczyna powyższego stanu rzeczy, musimy znaleźć jakieś rozwiązanie zastępcze.
Sprubujmy wykonać mnożenie 115 * 3
document.write( 115 * 3 ) //wypisze się 345
Otrzymujemy prawidłowy wunik, czyli 345, zatem wszystko jest w porządku. Wnioskiem jest więc, że arytmetyka przeprowadzana na liczbach całkowitych jest prawidłowo przeprowadzana. Możemy zatem z niej skorzystać, po czym wynik przekształcić z typu Number na String, dodając przy tym w odpowiednim miejscu przecinek dziesiętny.
Jeśli musimy zrobić jakieś dalsze wyliczenia, z powrotem przekształcamy napis na liczbę, usuwamy kropkę dziesiętną i liczymy.
Przykładowe rozwiązanie tego problemu za pomocą metod Math pokazane jest poniżej. Parametr number wskazuje na liczbę (wyrażenie), która ma być zwrucona, a parametr X na liczbę miejsc po przecinku:
function round(number,x) {
var x = (!x ? 2 : x);
return Math.round(number*Math.pow(10,x)) / Math.pow(10,x);
}
document.write( round(0.119 * 100) )
...