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.
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.30000000000000004Moż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
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
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 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 (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).
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
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ść | 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; |
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() |