JavaScript cz.4 - liczby, Number


Number - typ danych liczbowych

JavaScript ma tylko jeden typ liczb przechowywane jako liczby zmiennoprzecinkowe podwójnej precyzji, zgodnie z międzynarodowym standardem IEEE 754. Ten format przechowuje liczby w 64 bitach, gdzie liczba (ułamek) jest przechowywana w bitach od 0 do 51, wykładnik potęgowy w bitach od 52 do 62, a znak w bicie 63. Liczby całkowite (liczby bez kropki lub notacji wykładniczej) mają dokładność do 15 cyfr.

var x = 3;
var y = 3.;
var z = 3.1;
Maksymalna liczba miejsc po przecinku wynosi 17, ale arytmetyka zmiennoprzecinkowa nie zawsze jest w 100% dokładna.
Możesz być zaskoczony ale:
document.writeln(0.4+0.2);   // zwróci wynik 0.6000000000000001
document.writeln(0.1+0.7);   // zwróci wynik 0.7999999999999999
document.writeln(0.1+0.2);   // zwróci wynik 0.30000000000000004
Możesz rozwiązać ten problem mnożąc i dzieląc przez potęgi 10:
document.writeln((0.4*10+0.2*10)/10);   // zwróci wynik 0.6
document.writeln((0.1*10+0.7*10)/10);   // zwróci wynik 0.8

document.writeln(0.02+0.07); // zwróci wynik 0.09000000000000001
document.writeln((0.02*100+0.07*100)/100); // zwróci wynik 0.09

Operator +

Jeśli dodasz liczbę i ciąg (bądź ciąg i liczbę), wynikiem będzie konkatenacja ciągu. Musisz przy tym pamiętać, że interpretator JavaScript działa od lewej do prawej.

var x = 10;
var y = 20;
document.write("Sumowanie: " + x + y);  
//oczekiwane: Sumowanie: 30 ? :)
//zwróci:    Sumowanie: 1020

JavaScript będzie próbował przekonwertować ciągi na liczby we wszystkich operacjach numerycznych ale musisz pamiętać, że + będzie miał tu priorytet do łączenia łańcuchów.

var x = "100";
var y = 11;
alert(x - y);    //89 
alert(x + y);   //10011

NaN (Not a Number)

Próba wykonania arytmetyki za pomocą łańcucha nienumerycznego spowoduje NaN (Not a Number). Czy wyrażenie jest NaN możesz sprawdzić za pomocą isNaN(). Nan jest liczbą:

var x = 100/"Ala";  
alert(x);          //zwróci: NaN
alert(isNaN(x));   //zwróci: true
typeof NaN;       //zwróci number
alert(x+5);       //zwróci: NaN
alert(x+"Ala");   //zwróci NaNAla (string) 

+ - Infinity (nieskończoność)

Infinity to wartość (liczba) spoza zakresu przeliczalności JavaScript

var x = 2**2**2**2**2; 
alert(x);                //zwróci: Infinity
alert(-x);               //zwróci: -Infinity
alert(1/0);              //zwróci: Infinity
alert(-1/0);             //zwróci: -Infinity
alert(typeof Infinity);  // zwróci "number"

Liczby hexadecymalne

Liczby hexadecymalne (szesnastkowe) muszą być poprzedzone znakami 0x

document.write(0xFF);  //zwróci: 255

Uwaga: Niektóre wersje JavaScript interpretują liczby ósemkowe, jeśli są zapisane z wiodącym zerem więc lepiej nigdy nie zapisuj w ten sposób zwykłych liczb (np. 05).

Liczba jako obiekt Number

Zwykle liczby JavaScript są pierwotnymi wartościami utworzonymi z literałów:
var x = 12; //number

Ale liczby można również zdefiniować jako obiekty ze słowem kluczowym new:
var x = new Number(12); //object

jednak nie warto tego robić, spowalnia to kod i powoduje te same problemy co przy new String

Metody i właściwości liczby, Number

Obiekty mają właściwości i metody. Wartości pierwotne nie mogą ich mieć. Jednak w JS wartości pierwotne są traktowane jak obiekty podczas wykonywania metod i właściwości.

Właściwości Number

Właściwość Opis Składnia
constructor Zwraca funkcję konstruktora dla obiektu. Zwracana wartość jest odwołaniem do funkcji, a nie nazwą funkcji. number.constructor
prototype Umożliwia dodawanie właściwości i metod do obiektu Number.prototype.name = value
MAX_VALUE Zwraca największą możliwą liczbę w JavaScript (statyczna) Number.MAX_VALUE
MIN_VALUE Zwraca najmniejszą możliwą liczbę w JavaScript (statyczna) Number.MIN_VALUE
NaN Reprezentuje wartość/liczbę "To nie jest liczba". NaN jest takie samo jak Number.NaN Number.NaN
NEGATIVE_INFINITY Reprezentuje ujemną nieskończoność (zwracaną przy przepełnieniu) (statyczna) Number.NEGATIVE_INFINITY;
POSITIVE_INFINITY Reprezentuje nieskończoność (zwracaną przy przepełnieniu) (statyczna) Number.POSITIVE_INFINITY;

Metody Number

Wszystkie metody liczbowe zwracają nową wartość. Nie zmieniają oryginalnej zmiennej. Korzystając z metody przy użyciu liczby pierwotnej całkowitej number musisz użyć kropki dziesiętnej, np. 50..toPrecision(5) ponieważ pierwszą (jedną) kropkę JS zagarnie do reprezentacji liczby (50. istnieje dla JS jako liczba) lub użyć nawiasów (50).toPrecision(5)

Metoda Opis Składnia
isFinite() Sprawdza, czy wartość jest liczbą skończoną. Jeśli argument ma wartość NaN (nie jest liczbą), jest dodatnią lub ujemną nieskończonością, metoda ta zwraca false, w przeciwnym wypadku: true. Number.isFinite(wartość)
isInteger() Sprawdza, czy wartość jest liczbą całkowitą Number.isInteger(wartość)
isNaN() Sprawdza, czy wartością jest Number.NaN Number.isNaN(wartość)
isSafeInteger() Sprawdza, czy wartość jest bezpieczną liczbą całkowitą czyli może być dokładnie reprezentowana jako liczba podwójnej precyzji IEEE-754 - wszystkie liczby od 2 53-1 do - (2 53-1 ) Number.isSafeInteger(wartość)
toExponential(x) Konwertuje liczbę na notację wykładniczą. n (opcjonalne) to wymagana liczba cyfr po przecinku. number.toExponential(n)
toFixed(n) Konwertuje na łańcuch i formatuje liczbę z liczbą n cyfr po przecinku (opcjonalne, domylnie: 0) number.toFixed(n)
toLocaleString() Konwertuje liczbę na ciąg znaków na podstawie ustawień regionalnych. Lokalizacja (np. "pl-PL") i właściwości (np. waluta i znak waluty, itp.) są opcjonalne. number.toLocaleString(lokalizacja, opcje) 🛠
toPrecision(n) Formatuje liczbę na określoną długość (n) number.toPrecision(n)
toString() Konwertuje liczbę na ciąg znaków. Opcjonalnie można podać podstawę od 2 do 36 (wartość binarna 2, oktadecymalna 8, hexadecymalna 16, ...). number.toString(podstawa)
valueOf() Zwraca wartość pierwotną liczby number.valueOf()

Następny rozdział: matematyka (obiekt Math) lub menu jest po prawej stronie -->