Liczby

Typ liczbowy

W JavaScript mamy tylko 1 typ liczb,

Liczby są reprezentowane przez jeden typnumber

które możemy zapisać jako stałe int ang (int!!!) lub zmiennoprzecinkowe (float)

var age = 23;

var money = 25.90;

Na tę chwilę wiemy, że liczby całkowite mają typnumber. Co z liczbami rzeczywistymi, czyli takimi, które zawierają część ułamkową? W JavaScript tworzymy je wpisując część całkowitą, następnie kropka a potem część ułamkową.

Sprawdźmy jakiego typu jest zdefiniowana przez nas zmienna.

Np. var a= 12;

typeofa; //"number"

Zmienna którą zdefiniowaliśmy, jest również typunumber.

Sprawdźmy, jakie konsekwencje niesie za sobą występowanie tylko jednego typu liczbowego.

1

1===1.0

Operator===sprawdza, czy wartości po obu jego stronach są tego samego typu oraz mają tą samą wartość.

W powyższym przykładzie, liczby1i1.0są sobie równe i mają ten sam typ.

Jest to dość unikalna cecha. Musisz pamiętać, że za każdym razem wykonujesz działania na liczbach rzeczywistych.

Na przykład, w jezyku C++ operacja7 / 3zwróci wartość 2- część ułamkowa zostanie obcięta. W JavaScript, pomimo tego, że zapis wskazuje na liczby całkowite, działanie zwróci wartość 2.333333333.

Podstawowe operacje

Liczby można przypisywać do zmiennych. Możemy też dokonywać podstawowych operacji arytmetycznych i wyniki przez nie zwracane przypisywać do zmiennych:

Operatory arytmetyczne

Operator Nazwa
Dodawanie +
Odejmowanie -
Mnożenie *
Dzielenie /
Dzielenie modulo %
Inkrementacja, zwiększenie wartości o 1 ++
Dekrementacja, zmniejszenie wartości o 1 --

Dodawanie

Dodawać do siebie można również ciągi znaków, czyli stringi.

var a = 'lorem' + 'Ipsum';

Wartość a to terazloremIpsum.

foo = 'lorem' + 1 + 2;

foo wynosilorem12ponieważ typ zmiennej ustawiony jest najpierw jako string.

foo = 1+2+'lorem';

foowynosi3lorem, ponieważ typ zmiennej ustawiony był jakonumber.

Kilka przykładów znajduje się poniżej.

foo = 'lorem' + ['1', 2, 3.4]; // 'lorem1, 2, 3.4'

foo = ['1', 2, 3.4] + 'lorem'; // '1,2,3.4lorem'

foo = 9 + ['1', 2, 3.4]; // '91,2,3.4'

foo = ['1', 2, 3.4] + 9; // '1,2,3.49'

foo = ['1', 2, 3.4] + [1, '2', 3.4]; // '1,2,3.41,2,3.4'

foo = ['1', 2, 3.4] + {bar: 'lorem'}; // 1, 2, 3.4 [object Object]

foo = {bar: 'lorem'} + [1, '2', 3.4]; // [object Object] 1, 2, 3.4

foo = ['1', 2, 3.4] + undefined; // 1, 2, 3.4 undefined

foo = undefined + [1, '2', 3.4]; // undefined 1, 2, 3.4

Stwórz zmiennąsuma. Przypisz do niej sumę zmiennychaib. Utwórz także zmiennąmnozeniez iloczynem zmiennychaib.

Pamiętaj, że suma to wynik dodawania. Iloczyn to wynik mnożenia.

var a = 55;

var b = 40;

var suma = a + b;

var mnozenie = a * b;

Zadanie 2

Stwórz zmienneaibzawierające liczby całkowite. Następnie do zmiennejwynikwstaw taki wynik dzieleniaaprzezb, aby liczba w niej przechowywana nie była całkowita. Jeśli chcesz się przekonać, czy interpreter JavaScript dobrze obliczył wynik, możesz go wypisać na ekran.

var a = 55;

var b = 40;

var suma = a + b;

var mnozenie = a * b;

Zapis wykładniczy

Pomnóżmy ze sobą dwie bardzo duże liczby.

Jak widać otrzymaliśmy wartość1e+22. Jest to zapis wykładniczy.

W powyższym przykładzie jest to po prostu1 * 10^22, gdzie^oznacza potęgowanie.

100000000000
*
100000000000
;
// 1e+22
  • 2e+22 to 2 * 10^22
  • 3e+20 to 3 * 10^20
  • 3.3e+4 to 3.3 * 10^4 , czyli 33000

Myślę, że teraz już rozumiesz jak działa zapis wykładniczy.

Jeśli tworzysz zmienne samodzielnie, możesz również używać zapisu wykładniczego, jednak dla liczb, które łatwo zapisać tradycyjnym sposobem raczej nie warto jej używać.

Zadanie 3

Używając zapisu wykładniczego wstaw do zmiennejbwartość równą wartości zmienneja.

var a = 190000000000;

var b = 1.9e+11;

var result = (a === b);

Konwersja do typu string

W rozdziale o zmiennych wspomnieliśmy bardzo krótko o typiestring, który służy do przechowywania ciągów znaków. Ten typ jest szczególnie ważny, bo umożliwia nam wyświetlanie sformatowanych liczb.

Najpierw przekonajmy się o tym, że"128"nie jest tożsama wartości128.

!!!

Istnieje oczywiście sposób, żeby zamienić liczbę typunumberna typstring. Służy do tego metodatoString().

12 varnum=128;num.toString()==="128";// true

Warto wspomnieć, że metodatoString()nie modyfikuje zmiennej, a jedynie zwraca jej wartość jakostring. W powyższym przykładzie zmiennanumjest dalej typunumber. Aby zmienić typ zmiennej można przypisać wartość nowego typu do zmiennej, na przykład tak:

12 varnum=128;num=num.toString();

Teraz zmiennanumjest typustringi zawiera wartość"128".

Oczywiście możemy też dokonać zamiany w drugą stronę, służy do tego funkcjaparseInt. Pobiera ona jako argument ciąg znaków a zwraca liczbę. W przypadku gdy ciąg znaków oprócz cyfr zawiera też litery, na liczbę zostanie przekonwertowana pierwsza możliwa sekwencja.

123 parseInt('10')===10;// trueparseInt('10 %')===10;// trueparseInt('10 zł.')===10;// true

Ustalanie dokładności

W JavaScript istnieje możliwość wyświetlaniu wartości liczby z określoną ilością miejsc po przecinku. Przydaje się to w przykładach takich jak poniższy.

12 vara=10/3;a.toString();// "3.3333333333333335"

Rzadko kiedy zależy nam na aż tak dokładnie wyświetlonej wartości. Możemy ją zaokrąglić. Służą do tego metodytoFixed()oraztoPrecision().

MetodatoFixedsłuży do ustalenia ile cyfr po przecinku ma mieć dana liczba.

12 vara=10/3;a.toFixed(2);// "3.33"

MetodatoPrecisionsłuży do ustalenia ile cyfr ma mieć dana liczba.

12 vara=10/3;a.toPrecision(2);// "3.3"

Warto wiedzieć, że metodatoPrecisionzlicza liczby dopiero od wystąpienia pierwszej większej od0.

12 vara=0.03;a.toPrecision(2);// "0.030"

Warto jeszcze zauważyć, że obie powyższe metody zwracają wartości typustring, oraz podobnie jak metodatoString, nie modyfikują oryginalnej zmiennej.

Wartości specjalne

W wyniku operacji na liczbach możemy czasami otrzymać dwie wartości specjalne. Jedną z nich jestNaN, oznaczające “Not-a-Number”. Taką wartość otrzymujemy, gdy wynik działania z jakiegoś powodu nie jest liczbą.

1 10*"xyz";// NaN

Zadanie 4

Stwórz zmiennądziwnaZmiennai wstaw do niej wynik takiego działania, aby zmienna miała wartośćNaN. Aby było ciekawiej nie możesz użyć mnożenia, tak jak pokazaliśmy w przykładzie.

var dziwnaZmienna = 10 / 'a';

Kolejną wartością specjalną jestInfinity, czyli nieskończoność. Wartość taką otrzymujemy, gdy nasza liczba wyjdzie poza dostępny zakres. Dodajmy, że taka liczba musi być naprawdę bardzo duża.

1 1.7976931348623157E+10308;// Infinity

Zadanie 5

Stwórz zmiennązaDuza, do której wstawisz wynik takiego iloczynu, aby zmienna miała wartośćInfinity.

var zaDuza = 1.7976931348623157E+10308;

Jeśli chcesz możesz nie używać zapisu wykładniczego. Warto pamiętać, że zarównoNaN, jak iInfinity, są typunumber.

Problemy z liczbami

W JavaScript występują czasami niespodziewane problemy z liczbami. Można sobie jednak z nimi poradzić.

Jednym z takich problemów jest dzielenie przez 0. Jak wiadomo dzielić przez 0 nie można, dlatego można by się spodziewać, że podczas dzielenia przez 0 zostanie zgłoszony błąd, ewentualnie zwrócona zostanie wartośćNaN. JavaScript podczas takiego działania zwróci natomiast wartośćInfinity. Z tego powodu, jeśli wykonujemy dzielenie i nie mamy pewności co do wartości dzielnika, to warto ją sprawdzić.

Przedstawmy teraz kolejny problem. Dodając liczby0.1i0.2, można się spodziewać, że otrzymamy liczbę0.3. Sprawdźmy to.

1 0.1+0.2;// 0.30000000000000004

Jak widać nie otrzymaliśmy0.3lecz0.30000000000000004. Jest to błąd języka, który występuje jeszcze w kilku innych przypadkach. Można sobie z nim poradzić używając metodtoPrecisionlubtoFixed, które już poznaliśmy.

Zadanie 6

Przy użyciu odpowiedniej metody wpisz na ekran poprawny wynik dodawania zmiennychaib.

var a = 0.1;

var b = 0.2;

console.log((a + b).toFixed(1));

Zadanie 7

Celem tego zadania jest obliczenie kwoty, którą trzeba zapłacić w sklepie. Masz daną cenę za kilogramcenaZaKg, ilość kilogramówiloscKgoraz rabat w zmiennejrabat. Wykonując odpowiednie obliczenia, wylicz ile trzeba zapłacić i wstaw tą kwotę do zmiennejdoZaplaty.

var cenaZaKg = 0.8;

var iloscKg = 1.56;

var rabat = '15%';

var doZaplaty = (cenaZaKg * iloscKg * (1 - parseInt(rabat)/100)).toFixed(2);

NaN

Not a Number, czyli 'to nie jest liczba'. Występuje np. przy mnożeniu liczba razy string.

console.log(10 * 'napis'). // NaN

Infinity

Nieskończoność. W obliczeniach z pewnością wystąpił błąd - dzieje się tak na przykład, gdy spróbujesz dzielić przez zero.

results matching ""

    No results matching ""