U JavaScriptu, svi numerički podaci su uskladišteni kao 64-bitni brojevi s pokretnim zarezom. Brojevi su pohranjeni kao niz bitova nula i jedinica, što je direktna manifestacija binarnog sistema koji računari koriste za obradu podataka. Na nivou koda, brojevi se predstavljaju u dekadnom sistemu, ali je korisno razumjeti kako JavaScript koristi binarni prikaz za obradu i smještanje numeričkih vrijednosti.
Sistemski tipovi brojeva
- Binarni (binary): Najniži nivo digitalne obrade, koristi samo dve cifre - 0 i 1.
- Oktalni (octal): Koristi osmobazni sistem (baze 8), zastupljen sa ciframa od 0 do 7.
- Heksadecimalni (hexadecimal): Koristi šesnaestobazni sistem (base 16), zastupljen sa ciframa od 0 do 9 i slovima od A do F.
// Binarni broj (u JS-u ne postoji specifična oznaka za binarni broj pa se piše u vidu stringa)
let base2Num = '1010';
console.log(parseInt(base2Num, 2)); // 10
// Oktalni broj, ekvivalentan decimalnom 48
let base8Num = 0o60;
// Heksadecimalni broj, ekvivalentan decimalnom 15
let base16Num = 0xf;
Kategorizacija brojeva
Brojevi se mogu podijeliti u sledeće grupe:
- integer - decimalni brojevi bez ostatka. Kao integeri uglavnom se koriste brojevi koji pripadaju dekadnom sistemu, ali su u upotrebi oktalni i heksadecimalni brojevi.
const int = 10;
- float - decimalni brojevi sa ostatkom, tj decimalnom tačkom.
const floatNumber = 13.03;
// Ako se float broj pojavljuje bez ostatka, JS vrši konverziju tog broja u integer
const floatToInt = 132.00; // 132
/* ----- Metode float brojeva ----- */
const f = 11.23841;
/**
* @method toFixed(n) - formatiramo float broj sa određenim brojem decimalnih mjesta. Kao argument prihvata numeričku vrijednost koja se odnosi na broj decimalnih mjesta koja će zauzimati broj. Povratna vrijednost metode je u vidu stringa.
*/
console.log(f.toFixed(2)); // '11.24'
/**
* @method toExponential() - foramtira broj u e-notaciji i kao rezultat vraća string.
*/
console.log(f.toExponential()); // '1.12e+1'
/**
* @method toPrecision([n]) - kao rezultat daje string reprezentaciju number objekta sa specifičnom preciznošću. Kao argument prihvata numeričku vrijednost koja određuje broj značajnih cifara, a ukoliko se izostavi ona se ponaša kao @toString metoda
*/
console.log(f.toPrecison(3)); // '11.2'
- double - specijalni tip float broja koji omogućava veću preciznost od standardnog float broja. JavaScript po defaultu koristi “double-precision floating-point format” što je ekvivalento tipu double u drugim programskim jezicima.
U JavaScriptu, svi brojevi se tretiraju kao ‘number’ tip. Za ekstremne veličine brojeva koristi se predefinisana konstanta Infinity.
Infinity; - // pozitivna beskonačnost
-Infinity; - // negativna beskonačnost
Brojevi u JavaScriptu se mogu pisati koristeći separator _ kako bi se poboljšala čitljivost koda, naročito pri radu sa velikim numeričkim vrednostima.
let bigNumValue = 3_999_839_777;
NaN - nedefinisani broj
JavaScript ima posebnu numeričku vrijednost poznatu kao Nedefinisani Broj (NaN), koja je globalna konstanta. Ova vrijednost označava da je rezultat operacije nevažeći broj, odnosno nešto što nije broj. Na primjer, ako pokušamo podijeliti string s brojem, rezultat će biti NaN.
console.log("n" / 3); // NaN
NaN ima dvije specifične karakteristike:
- Svaka operacija koja uključuje NaN kao operand također rezultira NaN-om.
- NaN nije jednak nijednoj vrijednosti, čak ni drugim NaN vrijednostima.
console.log(NaN / 3); // NaN
console.log(NaN === NaN); // false
Number konstruktor
U JS-u brojeve možemo predstaviti u primitivnoj formi, ali i Number tip koja predstavlja referencu za numeričke vrijednosti. Ako koristimo operator new kreiramo Number objekat jer koristimo Number konstruktor i prosleđujemo mu brojčanu vrijednost. Da dobijemo primitivnu vrijednost iz Number objekta koristimo metodu valueOf. U slučaju da izostavimo operator new typeof će ukazivati na number ne na object.
let numObject = new Number("13");
// Da dobijemo primitivnu vrijednost koristi se metoda valueOf
console.log(numObject.valueOf());
// bez ključne riječi new imamo direktan pristup primitivnoj vrijednosti
let n = Number("11");
console.log(n);
Number svojstva i metodi
Pri radu sa velikim brojevima mogu se koristiti sledeća svojstva:
- Number.MAX_VALUE- najveća numerička vrijednost sa kojom je moguće raditi u JS-u.
- Number.MIN_VALUE - najmanja numerička vrijednost sa kojom je moguće raditi u JS.
- Number.MAX_SAFE_INTEGER - najveća cjelobrojna vrijednost koja obezbjeđuje tačnost računarskih operacija.
- Number.MIN_SAFE_INTEGER - najmanja cjelobrojna vrijednost koja obezbjeđuje tačnost računarskih operacija.
Number konstruktor posjeduje i korisne metode.
var myNum = 13;
Number.isInteger(myNum); // provjerava da li je proslijeđena vrijednost integer
Number.isNaN(myNum); // provjerava da li je proslijeđena vrijednost NaN
Number.isSafeInteger(myNum); // provjerava da li je proslijeđena vrijednost sigurna za računske operacije
BigInt
Predstavlja novi tip za numeričke vrijednosti. Koristi se za predstavljanje 64-bitnog integera. BigInt literal se piše kao string brojeva koji na kraju imaju malo slovo n.
1313n; // bigint literal
0b1111111n; // binary bigint
0o1313n; // octal
Da konvertujemo regularne brojeve u bigint može se koristiti funkcija BigInt().
BigInt(Number.MAX_SAFE_INTEGER);
Aritmetika sa big int je ista kao i sa običnim brojevima osim što dijeljenje zaokružuje rezultat ka nuli i odbacuje ostatak.