CodeWilderness
JS coding flow
Singing Parrot as author
Radošević Dejan

JS - Brojevi

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 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:

const int = 10;
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'

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:

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 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.