Js pjesë e plotë kur ndahet. Metodat për rrumbullakimin e numrave në JavaScript

Shtëpi / Instalimi i pajisjes

Në këtë artikull do të shikojmë në detaje numrat, operatorët matematikorë, mënyrat për të kthyer një numër në varg dhe anasjelltas, si dhe shumë pika të tjera të rëndësishme.

është funksioni i fundëm

Funksioni isFinite ju lejon të kontrolloni nëse një argument është një numër i fundëm.

Si përgjigje këtë funksion kthen false nëse argumenti është Infinity , -Infinity , NaN ose do të hidhet në një nga këto të veçanta vlerat numerike. NË ndryshe ky funksion do të kthehet i vërtetë.

IsFinite(73); // e vërtetë është e fundme (-1/0); // false është e Finite (Pafundësi); // false është e fundme(NaN); // false është e Finite ("Teksti"); // e rreme

Përveç funksion global isFinite JavaScript ka gjithashtu një metodë të quajtur Number.isFinite. Ndryshe nga është e Finite, ai nuk e detyron argumentin të konvertohet në numër.

IsFinite ("73"); // true Number.isFinite("73"); // e rreme

funksioni është NaN

Funksioni isNaN është krijuar për të përcaktuar nëse një argument është një numër apo mund të konvertohet në një. Nëse po, atëherë funksioni isNaN kthen false. Përndryshe kthehet e vërtetë.

IsNaN(NaN); //true isNaN("25px"); //e vërtetë, sepse 20px nuk është një numër isNaN(25.5); //false ështëNaN("25.5"); //false ështëNaN(" "); //false, sepse një hapësirë ​​ose disa hapësira konvertohet në 0 isNaN(null); //false, sepse null konvertohet në 0 isNaN(true); //false, sepse true është konvertuar në 1 isNaN(false); //false, sepse vlera false konvertuar në 0

Nëse ky veprim duhet të kryhet pa një tip cast, atëherë përdorni metodën Number.isNaN. Kjo metodë u fut në gjuhë duke filluar me ECMAScript 6.

Si të konvertohet në mënyrë eksplicite një varg në një numër?

Ju mund të konvertoni në mënyrë të qartë një varg në një numër duke përdorur metodat e mëposhtme:

1. Përdorni operator unar +, e cila duhet të vendoset përpara vlerës.

+"7.35"; // 7.35 +"tekst"; // NaN

Kjo metodë injoron hapësirat në fillim dhe në fund të rreshtit, si dhe \n (furnizimi i linjës).

+" 7.35"; //7.35 +"7.35 \n "; //7.35

Duke përdorur këtë metodë Vini re se një varg bosh ose një varg i përbërë nga hapësira dhe \n konvertohet në numrin 0. Përveç kësaj, ai gjithashtu konverton llojin e të dhënave null dhe vlerat boolean në një numër.

Null; //0 +e vërtetë; //1 +false; //0 +" "; //0

2. Funksioni ParseInt. Ky funksion është krijuar për të konvertuar argument në numër të plotë. Ndryshe nga përdorimi operator unar +, këtë metodë ju lejon të konvertoni një varg në një numër, në të cilin jo të gjithë personazhet janë numerikë. Fillon të konvertojë vargun, duke filluar nga karakteri i parë. Dhe sapo ndeshet me një karakter jonumerik, ky funksion ndalon punën e tij dhe kthen numrin që rezulton.

ParseInt ("18 px"); //18 parseInt("33.3%"); //33

Ky funksion mund të funksionojë me sisteme të ndryshme Numrat (binar, oktal, dhjetor, heksadecimal). Baza e sistemit të numrave specifikohet duke përdorur 2 argumente.

ParseInt ("18px", 10); //18 parseInt("33.3%", 10); //33 parseInt("101",2); //5 parseInt("B5",16); //181

Përveç funksionit parseInt, JavaScript ka metodën Number.parseInt. Kjo metodë nuk është e ndryshme nga funksioni parseInt dhe është futur në JavaScript me specifikimin ECMASCRIPT 2015 (6).

3. funksioni parseFloat. Funksioni parseFloat është i ngjashëm me parseInt, përveç që ju lejon të konvertoni argumentin në një numër thyesor.

ParseFloat ("33.3%"); //33.3

Përveç kësaj, funksioni parseFloat, ndryshe nga parseInt, nuk ka 2 argumente, dhe për këtë arsye ai gjithmonë përpiqet ta trajtojë vargun si një numër në sistemin e shënimeve dhjetore.

ParseFloat ("3.14"); parseFloat ("314e-2"); parseFloat ("0.0314E+2");

Përveç funksionit parseFloat, JavaScript ka metodën Number.parseFloat. Kjo metodë nuk është e ndryshme nga funksioni parseFloat dhe është futur në JavaScript me specifikimin ECMASCRIPT 2015 (6).

Shndërrimi i një numri në një varg

Ju mund ta ktheni një numër në një varg duke përdorur metodën toString.

(12.8).toString(); //"12.8"

Metoda toString gjithashtu ju lejon të specifikoni bazën e sistemit të numrave, duke marrë parasysh të cilat ju duhet të konvertoni në mënyrë eksplicite numrin në një varg:

(255).toString(16); //"ff"

Si të kontrolloni nëse një ndryshore është një numër

Ju mund të përcaktoni nëse vlera e një ndryshoreje është një numër duke përdorur një nga metodat e mëposhtme:

1. Përdorimi i funksioneve isNaN dhe isFinite:

// myVar është një variabël nëse (!isNaN(parseFloat(myVar)) && isFinite(parseFloat(myVar))) ( //myVar është një numër ose mund të hidhet në të);

Si funksion:

// funksioni i funksionit ështëNumerik(vlera) (kthimi !isNaN(parseFloat(vlera)) && isFinite(parseFloat(vlera)); ) // përdorni var myVar = "12px"; console.log(isNumeric(myVar)); //e vërtetë

Kjo metodë ju lejon të përcaktoni nëse vlera e specifikuar është një numër ose mund të konvertohet në një. Ky opsion nuk numëron vargun bosh, vargun e hapësirave, null, Infinity, -Infinity, true dhe false si numër.

2. Duke përdorur operatorin tipof dhe funksionet isFinite, isNaN:

// funksioni që kontrollon nëse vlera është një funksion numëror ështëNumber(vlera) (kthimi i llojit të vlerës === "number" && isFinite(value) && !isNaN(value); }; // использование функции isNumber isNumber(18); //true // использование функций для проверки текстовых значений isNumber(parseFloat("")); //false isNumber(parseFloat("Infinity")); //false isNumber(parseFloat("12px")); //true !}

Ky funksion përcakton nëse vlera e specifikuar është e tipit Number, dhe gjithashtu nëse i përket njërit prej tyre kuptime të veçanta Pafundësia, -Pafundësia dhe NaN. Nëse po, atëherë ky funksion kthehet i vërtetë.

3. Përdorimi i metodës ECMAScript 6 Number.isInteger(value). Kjo metodë ju lejon të përcaktoni nëse vlera e specifikuar është një numër i plotë.

Numri.isNumri i plotë ("20"); //false, sepse kjo metodë nuk konverton një varg në një numër Number.isInteger(20); //e vërtetë, sepse kjo vlerë është një numër

Numrat çift dhe tek

Ju mund të kontrolloni nëse një numër është çift apo tek duke përdorur funksionet e mëposhtme:

// Funksioni për kontrollimin e një numri për funksionin e barazisë çift ështëEven(n) ( kthen n % 2 == 0; ) // Funksioni për kontrollimin e një numri për funksionin e barazisë tek ështëOdd(n) ( kthen Math.abs(n % 2) == 1;

Por, përpara se të kryeni një kontroll të tillë, këshillohet të siguroheni që vlera e specifikuar është një numër:

Vlera = 20; if (Number.isInteger(vlera)) ( if (isEven(vlera)) ( console.log("Number" + value.toString() + " - çift"); ) )

Numrat kryesorë në Javascript

Le të shohim një shembull në të cilin do të shfaqim numrat e thjeshtë nga 2 në 100 duke përdorur Javascript.

// Funksioni që kontrollon nëse një numër është funksioni kryesor ështëPrime(vlera) (< 2) return false; var max=Math.floor(Math.sqrt(value)); for (var i = 2; i< = max; i++) { if (value%i==0) { return false; } } return true; } // создать массив, который будет содержать простые числа от 2 до 100 var primaryNumber = ; for (var i = 2; i <= 100; i++) { if(isPrime(i)) primaryNumber.push(i); } // вывести в консоль простые числа от 2 до 100 console.log(primaryNumber);

Rrumbullakimi i një numri në Javascript

Ka mënyra të ndryshme për të rrumbullakosur një thyesë në një numër të plotë në JavaScript.

1. Përdorimi i metodave Math.floor, Math.ceil dhe Math.round të krijuara posaçërisht për këtë. Metoda Math.floor rrumbullakos një fraksion poshtë në numrin e plotë më të afërt, d.m.th. thjesht hedh poshtë pjesën thyesore. Math.tavan rrumbullakos një thyesë deri në numrin e plotë më të afërt. Math.rrumbullakos një numër lart ose poshtë në varësi të vlerës së pjesës thyesore. Nëse pjesa e pjesshme është më e madhe ose e barabartë me 0,5, atëherë lart, përndryshe kthesa është poshtë.

Console.log (Math.floor(7.9)); //7 console.log(Math.ceil(7.2)); //8 console.log(Math.round(7.5)); //8

2. Përdorimi i metodës toFixed (precision). Kjo metodë rrumbullakon pjesën thyesore të një numri në një saktësi të caktuar. Rezultati i rrumbullakimit kthehet si varg.

Console.log(7.987.toFixed(2)); //"7.99"

Nëse nuk ka numra dhjetorë të mjaftueshëm për të formuar saktësinë e specifikuar të numrit, atëherë ai është i mbushur me zero.

Console.log(7.987.toFixed(5)); //"7.98700"

3. Përdorimi i metodës toPrecision(saktësia). Kjo metodë paraqet një numër me një saktësi të caktuar. Në të njëjtën kohë, ai mund të rrumbullakos jo vetëm thyesoren, por edhe të gjithë pjesën e numrit. Në varësi të rezultatit, kjo metodë mund të paraqesë numrin që rezulton me një pikë fikse ose në formë eksponenciale.

Console.log((1001).toPrecision(2)); //"1.0e+3" console.log((1001).toPrecision(5)); //"1001.0" console.log((12.4).toPrecision(1)); //"1e+1" console.log((12.4).toPrecision(2)); //"12" console.log((12.4).toPrecision(3)); //"12.4" console.log((12.4).toPrecision(5)); //"12.400"

4. Përdorimi i operatorëve logjik NOT ose OR.

//nëpërmjet konsolës së mohimit të dyfishtë logjik.log(~~7.9); //7 // duke përdorur OSE logjike me zero: console.log(7.9^0); //7

Pjesë e plotë dhe thyesore e një numri

Ju mund të merrni pjesën e plotë të një numri duke përdorur metodat Math.floor() dhe parseInt():

Console.log (Math.floor(7.21)); // 7 console.log(parseInt(7.21)); // 7

Ju mund të merrni pjesën thyesore të një numri duke përdorur operatorin përqindje (%). Ky operator kthen mbetjen që do të fitohet nga pjesëtimi i numrit të parë me të dytin. Në këtë rast, duhet të përdorni 1 si numrin e dytë.

Console.log (7.21%1); // 0.20999999999999996 // saktë deri në 2 shifra dhjetore console.log((7.21%1).toFixed(2)); // "0.21"

Për më tepër, pjesa e pjesshme mund të merret gjithashtu duke përdorur llogaritjet:

numri var = 7,21; var fraksionNumber = numri - Math.floor(Math.abs(numri)); konsol.log (fraksionNumber); // 0.20999999999999996

A është numri i pjesëtueshëm me një numër të plotë?

Ju mund të përcaktoni nëse një numër është i pjesëtueshëm me një numër të plotë duke përdorur operatorin përqindje:

numri var = 9; // nëse pjesa e mbetur e numrit pjesëtuar me 3 është 0, atëherë po, përndryshe jo nëse (numri%3==0) ( console.log ("Numri " + numri + " është i pjesëtueshëm me 3"); ) else ( log ("Numri " + numri + " nuk ndahet me 3");

Formatimi i numrave

Në JavaScript, metoda toLocaleString() ju lejon të formatoni daljen e një numri në përputhje me standardet rajonale (cilësimet e gjuhës së sistemit operativ).

Për shembull, le të formatojmë një numër në përputhje me standardet rajonale që janë instaluar në sistem si parazgjedhje:

numri var = 345,46; console.log(number.toLocaleString()); //"345.46"

Për shembull, le të formatojmë numrin në përputhje me standardet rajonale të Rusisë (ru):

Console.log((108.1).toLocaleString("ru-RU")); //"108.1"

Kjo metodë mund të përdoret gjithashtu për të formatuar një numër si monedhë:

Console.log((2540.125).toLocaleString("ru-RU",(stili:"monedha", monedha:"RUB"))); //"2,540.13 ₽" console.log((89.3).toLocaleString("ru-RU",(stili:"monedha", monedha:"USD"))); //"89.30 $" console.log((2301.99).toLocaleString("ru-RU",(stili:"monedha", monedha:"EUR"))); //"2,301,99 €"

Paraqitja e një numri si përqindje:

Console.log((0.45).toLocaleString("ru-RU",(stili:"përqind"))); //"45%"

Ndani një numër në shifra (përdorni vetinë Grouping):

Console.log((125452.32).toLocaleString("ru-RU",(useGrouping:true))); //"125,452.32"

Shtypni një numër me një numër të caktuar shifrash (2) pas pikës dhjetore:

Console.log((1240.4564).toLocaleString("ru-RU",(minimumFractionDigits:2, maximumFractionDigits:2))); //"1,240.46"

Krahasimi i numrave

Operatorët e mëposhtëm përdoren për të krahasuar numrat në JavaScript: == (e barabartë), != (jo e barabartë), > (më e madhe se),< (меньше), >= (më e madhe se ose e barabartë me),<= (меньше или равно).

Për shembull, le të krahasojmë dy numra:

Console.log(2>3); //false console.log(5>=3); //e vërtetë

Kur krahasoni numrat me një pjesë të pjesshme, është e nevojshme të merren parasysh gabimet që mund të lindin gjatë këtyre llogaritjeve.

Për shembull, në JavaScript shuma e numrave (0.2 + 0.4) nuk është e barabartë me 0.6:

Console.log((0.2+0.4)==0.6); //e rreme

Gabimet ndodhin sepse një kompjuter ose një pajisje tjetër elektronike kryen të gjitha llogaritjet në sistemin e numrave të dytë. Ato. Para se të kryejë ndonjë veprim, kompjuteri duhet së pari të konvertojë numrat e paraqitur në shprehje në sistemin e 2-të të numrave. Por jo çdo numër dhjetor thyesor mund të përfaqësohet saktësisht në sistemin e 2-të të numrave.

Për shembull, numri 0.25 10 konvertohet saktësisht në binar.

0,125 × 2 = 0,25 | 0 0,25 × 2 = 0,5 | 0 0,5 × 2 = 1 | 1 0,125 10 = 0,001 2

Për shembull, numri 0.2 10 mund të shndërrohet në sistemin 2 vetëm me një saktësi të caktuar:

0,2 × 2 = 0,4 | 0 0,4 × 2 = 0,8 | 0 0,8 × 2 = 1,6 | 1 0,6 × 2 = 1,2 | 1 0,2 × 2 = 0,4 | 0 0,4 × 2 = 0,8 | 0 0,8 × 2 = 1,6 | 1 0,6 × 2 = 1,2 | 1 0,2 × 2 = 0,4 | 0 0,4 × 2 = 0,8 | 0 0,8 × 2 = 1,6 | 1 0,6 × 2 = 1,2 | 1 ... 0,2 10 = 0,001100110011... 2

Si rezultat, këto gabime do të ndikojnë në llogaritjen e shumës së dy numrave dhe në rezultatet e krahasimit. Ato. Rezulton se JavaScript në të vërtetë do ta shohë këtë hyrje si më poshtë:

0.6000000000000001==0.6

Kur llogaritni ose shfaqni numra me pjesë thyesore, gjithmonë duhet të tregoni saktësinë me të cilën dëshironi ta bëni këtë.

Për shembull, krahasoni numrat deri në 2 shifra dhjetore duke përdorur metodat toFixed() dhe toPrecision():

//metoda toFixed() console.log((0.2+0.4).toFixed(2)==(0.6).toFixed(2)); //true //metoda toPrecision() console.log((0.2+0.4).toPrecision(2)==(0.6).toPrecision(2)); //e vërtetë

Veprimet themelore matematikore

Operatorët matematikorë të mëposhtëm ekzistojnë në JavaScript: + (mbledhja), - (zbritja), * (shumëzimi), / (pjestimi), % (modulo), ++ (rritni një vlerë me 1), -- (zvogëloni një vlerë me 1).

6+3 //9 6-3 //3 6*3 //18 6/3 //2 6%3 //0, d.m.th. 6:3=2 => 6-3*2 => pushim(0) 5%2 //1, d.m.th. 5:2=2(.5) => 5-2*2 => pushim(1) 7.3%2 //1.3, d.m.th. 7.3:2=3(.65) => 7.3-2*3 => pushim(1.3) //shenja e rezultatit të veprimit % është e barabartë me shenjën e vlerës së parë -9%2.5 //-1.5 , d.m.th. 9:2.5=3(.6) => 9-2.5*3 => pushim (1.5) -9%-2.5 //-1.5, d.m.th. 9:2.5=3(.6) => 9-2.5*3 => pushim (1.5) -2%5 //-2, d.m.th. 2:5=0(.4) => 2-5*0 => pushim(2) x = 3; konsol.log(x++); // nxjerr 3, pastaj vendos 4 console.log(x); //4 x = 3; konsol.log(++x); //bashket 4 dhe nxjerr x = 5; konsol.log(x--); // nxjerr 5, pastaj vendos 4 console.log(x); //4 x = 5; konsol.log(--x); //bashkësitë 4 dhe daljet Përveç kësaj, JavaScript ka operatorë të kombinuar: x+=y (x=x+y), x-=y (x=x-y), x*=y (x=x*y), x/= y (x=x/y), x%=y (x=x%y).

x = 3; y = 6; x+=y; konsol.log(x); //9 x = 3; y = 6; x-=y; konsol.log(x); //-3 x = 3; y = 6; x*=y; konsol.log(x); //18 x = 3; y = 6; x/=y; konsol.log(x); //0,5 x = 3; y = 6; x%=y; konsol.log(x); //3 Shpesh llogaritjet prodhojnë rezultate që janë jashtë kufijve të dëshiruar. Si rezultat, është e nevojshme të zbatohet Rrumbullakimi në JavaScript

deri në një vlerë të caktuar.

Pse rrumbullakosni numrat?

0.1 * 0.2; > 0.020000000000000004

JavaScript nuk ruan numra të plotë sepse vlerat e tyre përfaqësohen si numra me pikë lundruese. Shumë thyesa nuk mund të përfaqësohen si një numër me një numër specifik të fundëm të numrave dhjetorë, kështu që JavaScript mund të gjenerojë rezultate si më poshtë:

Në praktikë, kjo nuk do të bëjë ndonjë ndryshim, pasi po flasim për një gabim prej 2 kuintiliontësh. Por kjo mund të ndikojë në rezultatet kur punoni me numra që përfaqësojnë vlerat e monedhës, përqindjet ose madhësinë e skedarit. Prandaj, ju duhet të bëni ose në një numër të caktuar dhjetor.

Për të "prerë" një numër dhjetor, përdorni metodat toFixed() ose toPrecision(). Ata të dy marrin një argument, i cili specifikon numrin e vendeve domethënëse dhe dhjetore që do të përfshihen në rezultat:

  • nëse toFixed() nuk ka asnjë argument të specifikuar, vlera e paracaktuar është 0, domethënë nuk ka shifra dhjetore; vlera maksimale e argumentit është 20;
  • nëse nuk i jepet argument toPrecision(), numri nuk ndryshohet.

var randNum = 6,25; randNum.toFixed(); > "6" Math.PI.toPrecision(1); > "3" var randNum = 87.335; randNum.toFixed(2); > "87.33" var randNum = 87.337; randNum.toPrecision(3); > "87.3"

Shënim

Si toFixed() ashtu edhe toPrecision kthejnë një paraqitje të rrumbullakosur të vargut të rezultatit, në vend të një numri. Kjo do të thotë se shtimi i rrumbullakosur në randNum do të rezultojë në një lidhje të vargjeve në vend të një numri të vetëm:

console.log (randNum + rrumbullakosur); > "6.256"

Nëse dëshironi që JavaScript të rrumbullakos një numër në të qindtën më të afërt, përdorni parseFloat():

var randNum = 6,25; var i rrumbullakosur = parseFloat(randNum.toFixed(1)); konsol.log (i rrumbullakosur); > 6.3

toFixed() dhe toPrecision() janë gjithashtu metoda të dobishme për shkurtimin sasi e madhe vende dhjetore. Kjo është e dobishme kur punoni me numra që përfaqësojnë njësitë monetare:

var totalNum = 1 var dollarCents = wholeNum.toFixed(2); console.log (dollarëCents); > "1.00"

Vini re se nëse një numër ka më shumë shifra se sa saktësia e specifikuar, toPrecision do të nxjerrë rezultatin në formatin shkencor:

var num = 123.435 num.toPrecision(2); > "1.2e+2"

Si të shmangni gabimet gjatë rrumbullakimit të numrave dhjetorë

Në disa raste të Fixed dhe toPrecision implement JavaScript rrumbullakimi 5 poshtë, dhe jo më shumë:

var numTest = 1,005; numTest.toFixed(2); > 1;

Rezultati i shembullit të mësipërm duhet të jetë 1.01, jo 1. Nëse dëshironi të shmangni këtë gabim, ju rekomandoj të përdorni numra eksponencialë:

funksioni i rrumbullakët (vlera, dhjetore) (kthimi Numri (Math.round (vlera+"e"+dhjetëshe)+"e-"+dhjetëshe); )

Aplikimi:

raundi (1.005,2); > 1.01

Nëse keni nevojë për një zgjidhje edhe më të fortë se rrumbullakimi, ajo është në dispozicion në MDN.

Rrumbullakimi me epsilon

Metoda alternative Rrumbullakimi i JavaScript në të dhjetat u prezantua në ES6 ( i njohur gjithashtu si JavaScript 2015). « Makine epsilon" siguron një kufi të arsyeshëm gabimi kur krahasojmë dy numra me pikë lundruese. Pa rrumbullakosje, krahasimet mund të prodhojnë rezultate të ngjashme me sa vijon:

0,1 + 0,2 === 0,3 > e rreme

Math.EPSILON mund të përdoret në një funksion për të marrë një krahasim të vlefshëm:

funksioni epsEqu(x, y) (kthimi Math.abs(x - y)< Number.EPSILON * Math.max(Math.abs(x), Math.abs(y)); }

Funksioni merr dy argumente: njëra përmban llogaritjet, e dyta rezultatin e pritur (të rrumbullakosur). Ai kthen një krahasim të këtyre dy parametrave:

epsEqu(0.1 + 0.2, 0.3) > e vërtetë

Të gjithë shfletuesit modern mbështesin funksionet matematikore ES6. Por nëse keni nevojë të ofroni mbështetje në shfletues të vjetër, atëherë duhet të përdorni polifills.

Shkurtimi i numrave dhjetorë

Të gjitha metodat e paraqitura më parë funksionojnë Rrumbullakimi i JavaScript në të dhjetat. Për të shkurtuar një numër pozitiv në dy shifra dhjetore, shumëzojeni atë me 100, shkurtojeni përsëri dhe pastaj ndani rezultatin me 100:

funksioni i cunguar(num) (kthimi Math.trunc(num * 100) / 100; ) i cunguar(3.1416) > 3.14

Nëse keni nevojë për diçka më fleksibël, mund të përdorni operatorin bitwise:

funksioni i cunguar (num, vende dhjetore) ( var numPowerConverter = Math.pow (10, vende dhjetore); kthe ~~ (num * numPowerConverter)/numPowerConverter; )

Përdorimi:

var randInt = 35.874993; cunguar (randInt,3); > 35,874

Rrumbullakosni në numrin më të afërt

Për të zbatuar Rrumbullakimi i JavaScript në numrin e plotë më të afërt, Math.round() përdoret:

Math.Round(4.3) > 4 Math.Round(4.5) > 5

Vini re se " gjysma e vlerave", të tilla si .5, janë të rrumbullakosura lart.

Rrumbullakosni deri në numrin e plotë më të afërt

Nëse dëshironi të rrumbullakoni poshtë, përdorni metodën Math.floor():

Math.kati(42.23); > 42 Mat.kat(36.93); > 36

Rrumbullakimi poshtë ka një drejtim për të gjithë numrat, duke përfshirë ata negativë. Kjo mund të imagjinohet si një rrokaqiell me një numër të pafund katesh, duke përfshirë nën nivelin e themelit ( që përfaqësojnë numra negativë). Nëse jeni në ashensor midis kateve të bodrumit 2 dhe 3 ( që i përgjigjet një vlere prej -2.5), Math.floor do t'ju çojë në katin -3:

Math.kat (-2,5); > -3

Nëse duhet ta shmangni këtë, përdorni rrumbullakimin matematikor të JavaScript duke përdorur Math.trunc() , i mbështetur në të gjitha shfletues modern(përveç IE/Edge):

Math.trunc(-41,43); > -41

MDN gjithashtu ofron Polyfill me tre rreshta për të ofruar mbështetje për Math.trunc në shfletuesit më të vjetër dhe IE/Edge.

Rrumbullakosni deri në numrin e plotë më të afërt

Nëse dëshironi të rrumbullakosni numrat dhjetorë, përdorni Math.ceil . Kjo metodë mund të konsiderohet gjithashtu si një ashensor i pafund: Math.tavan ju çon gjithmonë "lart", pavarësisht nëse numri është negativ apo pozitiv:

Math.tavan (42.23); > 43 Math.ceil(36.93); > 37 Math.ceil(-36,93); -36

Rrumbullakosni në shumëfishin më të afërt

Nëse ju duhet të rrumbullakosni një vlerë në shumëfishin më të afërt të 5, krijoni një funksion që e ndan numrin me 5, e rrumbullakos atë dhe më pas shumëzon rezultatin me të njëjtën vlerë:

funksioni roundTo5(num) (kthimi Math.round(num/5)*5; )

Përdorimi:

raundiTo5(11); > 10

Nëse keni nevojë për JavaScript për të rrumbullakosur në dy shifra, ju mund t'i kaloni si seed ashtu edhe shumëfishin në funksion:

funksion roundToMultiple(num, shumëfish) ( ktheje Math.round(num/shumë)*shumë; )

Për të përdorur funksionin, përfshini numrin që do të rrumbullakoset dhe shumëfishin në thirrjen e tij:

var Numri fillestar = 11; var shumëfish = 10; roundToMultiple (Numri fillestar, shumëfish); > 10;

Për të rrumbullakosur vlerat vetëm lart ose poshtë, zëvendësoni rrumbullakët me tavanin ose dyshemenë në funksion.

Lidhja e gamës

Ndonjëherë ju duhet të merrni një vlerë për x që duhet të jetë brenda një diapazoni të caktuar. Për shembull, na duhet një vlerë nga 1 në 100, por marrim vlerën 123. Për ta rregulluar këtë, mund të përdorni min() ( kthen numrin më të vogël) dhe maksimumi ( kthen numrin maksimal të lejuar).

Përdorimi:

var LowBound = 1; var highBound = 100; var numInput = 123; var clamped = Math.max(lowBound, Math.min(numInput, highBound)); tastierë.log (i shtrënguar); > 100;

Mund të krijoni një funksion ose zgjerim të klasës Number.

Shumë shpesh, llogaritjet në JavaScript nuk japin saktësisht rezultatet që duam. Natyrisht, ne mund të bëjmë çfarë të duam me numrat - të rrumbullakojmë lart ose poshtë, të vendosim intervale, të presim numrat e panevojshëm në një numër të caktuar numrash dhjetorë, gjithçka varet nga ajo që dëshironi të bëni me këtë numër në të ardhmen.

Pse është i nevojshëm rrumbullakimi?

Një nga aspektet interesante të JavaScript është se në fakt nuk ruan numra të plotë, ne punojmë menjëherë me numrat me pikë lundruese. Kjo, e kombinuar me faktin se shumë vlera thyesore nuk mund të shprehen në një numër të fundëm të numrave dhjetorë, në JavaScript mund të marrim rezultate si kjo:

0.1 * 0.2; > 0.020000000000000004 0.3 - 0.1 > 0.19999999999999998
Për qëllime praktike, kjo pasaktësi nuk ka rëndësi, në rastin tonë po flasim për një gabim në kuintilion pjesë, megjithatë, kjo mund të zhgënjejë disa. Mund të marrim gjithashtu rezultate disi të çuditshme kur punojmë me numra që përfaqësojnë monedhat, përqindjet ose madhësitë e skedarëve. Për të korrigjuar këto pasaktësi, ne vetëm duhet të jemi në gjendje të rrumbullakojmë rezultatet dhe mjafton të vendosim saktësinë dhjetore.

Rrumbullakimi i numrave ka aplikime praktike, ne mund të manipulojmë një numër brenda një diapazoni të caktuar, për shembull duam të rrumbullakojmë një vlerë në numrin e plotë më të afërt në vend që të punojmë vetëm me pjesën dhjetore.

Rrumbullakimi i numrave dhjetorë

Për të prerë një numër dhjetor, përdorni metodën toFixed ose toPrecision. Të dy marrin një argument të vetëm që specifikon, përkatësisht, sa shifra domethënëse (d.m.th., numri i përgjithshëm i shifrave të përdorura në numër) ose numra dhjetorë (numri pas pikës dhjetore) rezultati duhet të përfshijë:
  1. Nëse një argument nuk është përcaktuar për toFixed(), ai do të jetë i paracaktuar në zero, që do të thotë 0 vende dhjetore, argumenti ka një vlerë maksimale prej 20.
  2. Nëse nuk i jepet asnjë argument për Precision, numri mbetet i paprekur
le të randNum = 6,25; randNum.toFixed(); > "6" Math.PI.toPrecision(1); > "3" randNum = 87.335; randNum.toFixed(2); > "87.33" randNum = 87.337; randNum.toPrecision(3); > "87.3"
Të dyja metodat toFixed() dhe toPrecision() kthejnë një paraqitje të vargut të rezultatit, jo një numër. Kjo do të thotë që kur përmbledh një vlerë të rrumbullakosur me randNum, do të prodhojë një bashkim vargjesh dhe jo një shumë numrash:

Le të randNum = 6.25; le të rrumbullakosura = randNum.toFixed(); // "6" console.log (randNum + rrumbullakosur); > "6.256"
Nëse dëshironi që rezultati të jetë një lloj i të dhënave numerike, atëherë do t'ju duhet të përdorni parseFloat:

Le të randNum = 6.25; le të rrumbullakosura = parseFloat(randNum.toFixed(1)); konsol.log (i rrumbullakosur); > 6.3
Ju lutemi vini re se vlerat prej 5 janë të rrumbullakosura, përveç në raste të rralla.

Metodat toFixed() dhe toPrecision() janë të dobishme sepse ato jo vetëm që mund të presin pjesën e pjesshme, por gjithashtu të shtojnë numra dhjetorë, gjë që është e përshtatshme kur punoni me monedhën:

Le të gjithëNum = 1 le dollarëCents = wholeNum.toFixed(2); console.log (dollarëCent); > "1.00"
Vini re se toPrecision do të prodhojë rezultatin në shënimin shkencor nëse numri i numrave të plotë është më i madh se vetë saktësia:

Le të jetë num = 123.435 num.toPrecision(2); > "1.2e+2"

Si të shmangni gabimet e rrumbullakosjes me numra dhjetorë

Në disa raste, toFixed dhe toPrecision rrumbullakosin vlerën 5 poshtë e lart:

Le të numTest = 1,005; numTest.toFixed(2); > "1.00"
Rezultati i llogaritjes së mësipërme duhet të ishte 1.01, jo 1. Nëse dëshironi të shmangni një gabim të ngjashëm, ne mund të përdorim zgjidhjen e propozuar nga Jack L Moore, e cila përdor numra eksponencialë për llogaritjen:

Funksioni i rrumbullakët (vlera, dhjetore) (kthimi Numri (Math.round (vlera+"e"+dhjetëshe)+"e-"+dhjetëshe); )
Tani:

Rrumbullakët(1.005,2); > 1.01
Nëse dëshironi një zgjidhje më të fortë se ajo e treguar më sipër, mund të shkoni te MDN.

Rrumbullakimi i epsilonit të makinës

Një metodë alternative për rrumbullakimin e numrave dhjetorë u prezantua në ES6. Rrumbullakimi i epsilonit të makinës siguron një kufi të arsyeshëm gabimi kur krahasohen dy numra me pikë lundruese. Pa rrumbullakosje, krahasimet mund të prodhojnë rezultate të ngjashme me sa vijon:

0,1 + 0,2 === 0,3 > e rreme
Ne përdorim Math.EPSILON në funksionin tonë për të marrë një krahasim të vlefshëm:

Funksioni epsEqu(x, y) (kthimi Math.abs(x - y)< Number.EPSILON * Math.max(Math.abs(x), Math.abs(y)); }
Funksioni merr dy argumente: i pari është llogaritja aktuale, i dyti është rezultati i pritur. Ai kthen një krahasim të të dyve:

EpsEqu(0.1 + 0.2, 0.3) > e vërtetë
Të gjithë shfletuesit modernë tashmë mbështesin funksionet e matematikës ES6, por nëse dëshironi mbështetje në shfletues si IE 11, përdorni polifills.

Prerja e pjesës thyesore

Të gjitha metodat e paraqitura më sipër mund të rrumbullakosin në numra dhjetorë. Për të shkurtuar thjesht një numër në dy shifra dhjetore, së pari duhet ta shumëzoni atë me 100 dhe më pas ta ndani rezultatin që rezulton me 100:

Funksioni i cunguar(num) (kthimi Math.trunc(num * 100) / 100; ) i cunguar(3.1416) > 3.14
Nëse dëshironi ta përshtatni metodën me çdo numër të numrave dhjetorë, mund të përdorni mohimin e dyfishtë në bit:

Funksioni i cunguar (num, vende dhjetore) ( le numPowerConverter = Math.pow (10, vende dhjetore); kthe ~~ (num * numPowerConverter)/numPowerConverter; )
Tani:

Le të randInt = 35.874993; cunguar (randInt,3); > 35,874

Rrumbullakosni në numrin më të afërt

Për të rrumbullakosur një numër dhjetor në numrin më të afërt lart ose poshtë, cilitdo që jemi më afër, përdorni Math.round():

Math.Round(4.3) > 4 Math.Round(4.5) > 5
Ju lutemi vini re se "gjysma e vlerës", 0.5 është rrumbullakosur sipas rregullave të matematikës.

Rrumbullakosni deri në numrin e plotë më të afërt

Nëse dëshironi të rrumbullakoni gjithmonë poshtë, përdorni Math.floor:

Math.kati(42.23); > 42 Mat.kat(36.93); > 36
Ju lutemi vini re se rrumbullakimi poshtë funksionon për të gjithë numrat, përfshirë numrat negativë. Imagjinoni një rrokaqiell me një numër të pafund katesh, duke përfshirë dyshemetë në nivelin e poshtëm (që përfaqësojnë numra negativë). Nëse jeni në një ashensor në nivelin më të ulët midis 2 dhe 3 (që përfaqëson një vlerë prej -2.5), Math.floor do t'ju çojë në -3:

Math.kat (-2,5); > -3
Por nëse doni të shmangni këtë situatë, përdorni Math.trunc, i mbështetur në të gjithë shfletuesit modernë (përveç IE/Edge):

Math.trunc(-41,43); > -41
Në MDN do të gjeni një polifill që do të ofrojë mbështetje për Math.trunc në shfletues dhe IE/Edge.

Rrumbullakosni deri në numrin e plotë më të afërt

Nga ana tjetër, nëse gjithmonë duhet të rrumbullakosni, përdorni Math.ceil. Përsëri, mbani mend ashensorin e pafund: Math.tavan do të shkojë gjithmonë "lart", pavarësisht nëse numri është negativ apo jo:

Math.tavan (42.23); > 43 Math.ceil(36.93); > 37 Math.ceil(-36,93); > -36

Rrumbullakimi lart/poshtë në numrin e kërkuar

Nëse duam të rrumbullakojmë në shumëfishin më të afërt të 5-së, mënyra më e lehtë është të krijojmë një funksion që e ndan numrin me 5, e rrumbullakos atë dhe më pas e shumëzon me të njëjtën shumë:

Funksioni roundTo5(num) (kthimi Math.round(num/5)*5; )
Tani:

RoundTo5 (11); > 10
Nëse dëshironi të rrumbullakoni në shumëfisha të vlerës suaj, ne përdorim një funksion më të përgjithshëm, duke kaluar në vlerën fillestare dhe shumëfishin:

Funksioni roundToMultiple(num, shumëfish) ( kthen Math.round(num/shumë)*shumë; )
Tani:

Le të jetë numri fillestar = 11; le të shumëfishta = 10; roundToMultiple (Numri fillestar, shumëfish); > 10;

Rregullimi i një numri në një interval

Ka shumë raste kur duam të marrim një vlerë prej x që shtrihet brenda një diapazoni. Për shembull, mund të na duhet një vlerë ndërmjet 1 dhe 100, por përfunduam me një vlerë prej 123. Për ta rregulluar këtë, ne mund të përdorim min (kthehet më i vogli i një grupi numrash) dhe max (kthimi më i madhi i çdo grupi të numrave). Në shembullin tonë, diapazoni është nga 1 në 100:

Le të ulëtBound = 1; le të lartëBound = 100; le numInput = 123; le clamped = Math.max(lowBound, Math.min(numInput, highBound)); tastierë.log (i shtrënguar); > 100;
Përsëri, ne mund ta ripërdorim operacionin dhe ta mbështjellim të gjithë në një funksion, duke përdorur zgjidhjen e propozuar nga Daniel X. Moore:

Number.prototype.clamp = funksion(min, maksimum) (kthim Math.min(Math.max(this, min), max); );
Tani:

NumInput.clamp(lowBound, highBound); > 100;

Rrumbullakimi Gaussian

Rrumbullakimi Gaussian, i njohur gjithashtu si rrumbullakimi i bankierit, përfshin rrumbullakimin në numrin çift më të afërt. Kjo metodë rrumbullakimi funksionon pa gabime statistikore. Zgjidhja më e mirë u sugjerua nga Tim Down:

Funksioni gaussRound(num, vende dhjetore) ( le të jetë d = vende dhjetore || 0, m = Math.pow(10, d), n = +(d ? num * m: num).toFixed(8), i = Math.kat (n), f = n - i, e = 1e-8, r = (f > 0,5 - e && f< 0.5 + e) ? ((i % 2 == 0) ? i: i + 1) : Math.round(n); return d ? r / m: r; }
Tani:

GaussRound(2.5) > 2 gaussRound(3.5) > 4 gaussRound(2.57,1) > 2.6
Dhjetor në CSS:

Meqenëse JavaScript përdoret shpesh për të krijuar pasqyrime pozicioni për elementët HTML, mund të pyesni veten se çfarë do të ndodhte nëse gjeneronim vlera dhjetore për elementët tanë:

#box (gjerësia: 63.667731993px; )
Lajmi i mirë është se shfletuesit modernë do të respektojnë vlerat dhjetore në modelin e bllokut, duke përfshirë përqindjen ose njësitë piksel.

Renditja

Shumë shpesh ne duhet të renditim disa elementë, për shembull, ne kemi një sërë regjistrimesh të lojës, dhe ato duhet të organizohen në rend zbritës të renditjes së lojtarëve. Fatkeqësisht, metoda standarde sort() ka disa kufizime befasuese: funksionon mirë me fjalët e zakonshme angleze, por prishet menjëherë kur ndeshet me numra, karaktere unike ose fjalë në shkronja të mëdha.

Renditja sipas alfabetit

Duket se renditja e një grupi në mënyrë alfabetike duhet të jetë një detyrë e thjeshtë:

Le fruta = ["kungull me gjalpë", "kajsi", "pjepër"]; fruta.rrjedh(); > "kajsi", "kungull me gjalpë", "pjepër"]
Sidoqoftë, ne hasim në një problem sapo njëri nga elementët të jetë i madh:

Le fruta = ["kungull me gjalpë", "kajsi", "Kantalope"]; fruta.rrjedh(); > "Pantalup", "kajsi", "kungull me gjalpë"]
Kjo ndodh sepse, si parazgjedhje, klasifikuesi krahason karakterin e parë të përfaqësuar në Unicode. Unicode është kod unik për çdo simbol, pavarësisht nga platforma, pavarësisht nga programi, pavarësisht nga gjuha. Për shembull, nëse shikoni tabelën e kodeve, karakteri "a" ka vlerën U+0061 (në heksadecimal 0x61), ndërsa karakteri "C" ka kodin U+0043 (0x43), i cili vjen më herët në Unicode. tabelë sesa personazhi "a".

Për të renditur një grup që mund të përmbajë shkronjat e para të përziera, duhet të konvertojmë të gjithë elementët përkohësisht në shkronja të vogla, ose përcaktoni rendin tuaj të renditjes duke përdorur metodën localeCompare() me disa argumente. Si rregull, për një rast të tillë, është më mirë të krijoni menjëherë një funksion për përdorim të përsëritur:

Funksioni alphaSort(arr) ( arr.sort(funksioni (a, b) ( return a.localeCompare(b, "en", ("ndjeshmëri": "bazë")); )); ) let fruit = ["kungull me gjalpë ", "kajsi", "pjepër"]; alfaSort(frut) >
Nëse dëshironi që grupi të renditet sipas rendit të kundërt alfabetik, thjesht ndërroni pozicionet e a dhe b në funksionin:

Funksioni alphaSort(arr) ( arr.sort(funksioni (a, b) ( return b.localeCompare(a, "en", ("sensitivity": "baze")); )); ) let fruit = ["kungull i gjalpit ", "kajsi", "pjepër"]; alphaSort(fruta) > ["Pantalup", "kungull me gjalpë", "kajsi"]
Këtu vlen të përmendet se localeCompare përdoret me argumente, gjithashtu duhet të kujtojmë se ai mbështetet nga IE11+, për versionet më të vjetra të IE, mund ta përdorim pa argumente, dhe me shkronja të vogla:

Funksioni caseSort(arr) ( arr.sort(funksioni (a, b) ( return a.toLowerCase().localeCompare(b.toLowerCase()); )); ) let fruit = ["kungull me gjalpë", "kajsi", "Palbani"]; caseSort(fruta) > ["kajsi", "kungull me gjalpë", "pjepër"]

Rendit numerik

E gjithë kjo nuk vlen për shembullin për të cilin folëm më lart në lidhje me grupin e rekordeve të lojës. Me disa vargje numerike, renditja funksionon mirë, por në një moment rezultati mund të jetë i paparashikueshëm:

Le të rezultatet më të larta = ; HighScores.sort(); >
Puna është se metoda sort() kryen një krahasim leksikografik: që do të thotë se numrat do të shndërrohen në një varg dhe krahasimet do të bëhen përsëri duke përputhur karakterin e parë të atij vargu sipas renditjes së karaktereve në tabelën Unicode. . Prandaj, ne përsëri duhet të përcaktojmë rendin tonë të renditjes:

Le të rezultatet më të larta = ; highScores.sort(funksioni(a,b) (kthimi a - b; )); >
Përsëri, për të renditur numrat në rend të kundërt, ndërroni pozicionet e a dhe b në funksion.

Renditja e një strukture të ngjashme me JSON

Dhe së fundi, nëse kemi një strukturë të dhënash të ngjashme me JSON të përfaqësuar si një grup rekord lojërash:

Let scores = [ ( "emri": "Daniel", "rezultati": 21768 ), ( "emri": "Michael", "rezultati": 33579 ), ( "emri": "Alison", "rezultati": 38395 ) ];
Në ES6+, mund të përdorni funksionet me shigjeta:

Scores.sort((a, b) => b.score - a.score));
Për shfletuesit e vjetër që nuk e kanë këtë mbështetje:

Scores.sort(funksioni(a, b) (kthimi a.score - b.score ));
Siç mund ta shihni, renditja në JavaScript është një gjë mjaft e errët, shpresoj që këta shembuj ta bëjnë jetën më të lehtë disi.

Puna me funksionet e fuqisë

Shpejtësia është një veprim i përcaktuar fillimisht si rezultat i shumëzimit të përsëritur të një numri natyror me vetveten, rrënja katrore e a është numri që jep a kur është në katror. Ne mund t'i përdorim këto funksione vazhdimisht në jetën e përditshme në mësimet e matematikës, duke përfshirë llogaritjen e zonave, vëllimeve, apo edhe modelimin fizik.

Në JavaScript, funksioni i fuqisë përfaqësohet si Math.pow(), dhe në standardin e ri ES7, u prezantua një operator i ri i fuqisë - " * * ".

Përhapja

Për të ngritur një numër në fuqinë e n-të, përdorni funksionin Math.pow(), ku argumenti i parë është numri që do të rritet në fuqi, argumenti i dytë është eksponenti:

Math.pow(3,2) > 9
Kjo formë shënimi do të thotë 3 në katror, ​​ose 3 × 3, që çon në rezultatin 9. Një shembull tjetër mund të jepet, natyrisht:

Math.pow(5,3); > 125
Kjo do të thotë, 5 kube, ose 5 × 5 × 5, është e barabartë me 125.

ECMAScript 7 është versioni tjetër i JavaScript, në parim, ne mund të përdorim operatorin e ri të propozuar të eksponentimit - * *, kjo formë shënimi mund të jetë më përshkruese:

3 ** 2 > 9
Aktiv për momentin Mbështetja për këtë operator është mjaft e kufizuar, kështu që përdorimi i tij nuk rekomandohet.

Funksioni i fuqisë mund të jetë më i dobishëm situata të ndryshme. Një shembull i thjeshtë, duke llogaritur numrin e sekondave në një orë: Math.pow (60,2).

Rrënjët katrore dhe kubike

Math.sqrt() dhe Math.cbrt() janë e kundërta e Math.pow(). Siç e kujtojmë, rrënja katrore e a është numri që jep a kur është në katror.

Math.sqrt(9) > 3
Në të njëjtën kohë, rrënja kubike e a është një numër që jep një kur ngrihet në një kub.

Math.cbrt(125) > 5
Math.cbrt() u prezantua vetëm kohët e fundit në specifikimin JavaScript dhe për këtë arsye mbështetet vetëm në shfletuesit modernë: Chrome 38+, Firefox dhe Opera 25+ dhe Safari 7.1+. Do ta vini re këtë Internet Explorer nuk është në këtë listë, por do të gjeni një polifill në MDN.

Shembuj

Sigurisht, ne mund të përdorim vlera jo të plota në një nga këto funksione:

Math.pow(1.25, 2); > 1,5625 Math.cbrt(56,57) > 3,8387991760286138
Ju lutemi vini re se kjo gjithashtu funksionon mjaft mirë kur përdorni vlera negative të argumentit:

Math.pow(-5,2) > 25 Math.pow(10,-2) > 0.01
Sidoqoftë, kjo nuk do të funksionojë për rrënjën katrore:

Math.sqrt(-9) > NaN
Nga analiza matematikore ne e dimë se një numër imagjinar i referohet rrënjëve katrore të numrave negativë. Dhe kjo mund të na çojë në një teknikë tjetër për të punuar me numra komplekse, por kjo është një histori tjetër.

Ju mund të përdorni thyesa në Math.pow() për të gjetur rrënjët katrore dhe kubike të numrave. Rrënja katrore përdor një eksponent prej 0.5:

Math.pow(5, 0.5); // = Math.sqrt(5) = 5 ** (1/2) > 2.23606797749979
Sidoqoftë, për shkak të paqartësive të pikës lundruese, nuk mund ta merrni me mend saktësisht rezultatin e saktë:

Math.pow(2.23606797749979,2) > 5.0000000000000001
Në situata të tilla, do t'ju duhet të drejtoheni në prerjen e shenjave nga numri ose rrumbullakosje në një vlerë.

Disa njerëz, për arsye të panjohura, në JavaScript ngatërrojnë funksionin Math.pow() me Math.exp() , që është funksioni eksponencial për numrat në përgjithësi. Shënim: në anglisht"eksponent" përkthehet si "eksponent", kështu që kjo ka më shumë gjasa të zbatohet për folësit anglezë, megjithëse ka emra alternativë për eksponent, si indeksi, fuqia.

Konstantet matematikore

Puna me matematikën në JavaScript bëhet më e lehtë nga një numër konstantesh të integruara. Këto konstante janë veti të objektit Math. Vlen të përmendet se konstantet shkruhen me shkronja të mëdha, jo me shënimin CamelCase.

Math.abs, parseInt, parseFloat

Puna me numra në JavaScript mund të jetë shumë më e ndërlikuar nga sa duket. Vlerat e marra nuk bien gjithmonë brenda kufijve të pritur, ndonjëherë rezultati mund të mos jetë aspak ai që prisnim.

Math.abs()

Metoda Math.abs() kthen vlerën absolute të një numri, i cili na kujton një funksion të ngjashëm matematikor për modulin e një numri.

Le të newVal = -57,64; Math.abs(newVal); > 57.64
Math.abs(0) gjithmonë kthen zero, por nëse vendosim një shenjë minus përpara funksionit -Math.abs(NUM), do të marrim gjithmonë një vlerë negative.

Math.abs(0); > -0

parseInt()

Ne e dimë që JavaScript e kupton se "15" është një varg, jo një numër, dhe, për shembull, kur analizojmë vetitë CSS duke përdorur JavaScript, ose kur marrim një vlerë nga një grup i papërgatitur, rezultatet tona mund të jenë të paparashikueshme. Ne mund të marrim një varg të përfaqësuar si "17px" si hyrje, dhe kjo nuk është e pazakontë për ne. Pyetja është se si ta konvertojmë këtë varg në një vlerë aktuale dhe ta përdorim atë në llogaritjet e mëtejshme.

Sintaksa: parseInt(string, radix);

Funksioni parseInt konverton argumentin e parë që i është dhënë në një lloj vargu, e interpreton atë dhe kthen një vlerë të plotë ose NaN. Rezultati (nëse jo NaN) është një numër i plotë dhe është argumenti i parë (vargu), i trajtuar si një numër në bazën e specifikuar. Për shembull, baza 10 tregon konvertimin nga dhjetori, 8 nga oktal, 16 nga heksadecimal, e kështu me radhë. Nëse baza është më e madhe se 10, atëherë shkronjat përdoren për të paraqitur numra më të mëdhenj se 9. Për shembull, për numrat heksadecimal (baza 16), përdoren shkronjat A deri në F.

Le të shohim një shembull të punës me vetitë CSS, ku, duke folur relativisht, mund të marrim vlerën e mëposhtme:

Le të elem = dokument.trup; le centerPoint = dritare.getComputedStyle(elem).transformOrigin; > "454px 2087.19px"
Ne mund t'i ndajmë vlerat sipas hapësirave:

Le të qendrat = centerPoint.split(" "); > ["454px", "2087.19px"]
Sidoqoftë, çdo element është ende një varg, ne mund ta heqim qafe këtë duke përdorur funksionin tonë:

Le të qendërX = parseInt(qendra, 10); > 454 le centerY = parseInt(qendra, 10); > 2087
Siç mund ta shihni, me argumentin e dytë ne tregojmë sistemin e numrave në të cilin do të konvertohet numri ky parametër është opsional, por rekomandohet ta përdorni nëse nuk e dini se cili varg do të merret si hyrje.

parseFloat ()

Nga shembulli i mësipërm, me siguri keni vënë re se parseInt hedh poshtë pjesën fraksionale. Në rastin tonë, parseFloat mund të punojë me numra me pikë lundruese. Përsëri, kjo mund të jetë e dobishme kur analizoni CSS dhe detyra të tjera, veçanërisht kur punoni me përqindje me pikë lundruese.

Sintaksa: parseFloat(string)

Le të FP = "33.33333%"; console.log(parseFloat(FP)); > 33.33333
Vini re se nuk ka asnjë argument të dytë në sintaksën parseFloat.

Ne e kuptojmë se parseInt() dhe parseFloat() janë jashtëzakonisht karakteristika të dobishme, është e rëndësishme të theksohet se ka disa gabime të përfshira, kështu që është e nevojshme të kontrollohet diapazoni i vlerave të pritura dhe në fund të analizohet rezultati për t'u siguruar që vlerat e marra janë të sakta.
Dërgo në mënyrë anonime

Në këtë artikull do të shikojmë në detaje numrat, operatorët matematikorë, mënyrat për të kthyer një numër në varg dhe anasjelltas, si dhe shumë pika të tjera të rëndësishme.

është funksioni i fundëm

Funksioni isFinite ju lejon të kontrolloni nëse një argument është një numër i fundëm.

Si përgjigje, ky funksion kthen false nëse argumenti është Infinity, -Infinity, NaN, ose do të hidhet në një nga këto vlera të veçanta numerike. Përndryshe, ky funksion do të kthehet i vërtetë.

IsFinite(73); // e vërtetë është e fundme (-1/0); // false është e Finite (Pafundësi); // false është e fundme(NaN); // false është e Finite ("Teksti"); // e rreme

Përveç funksionit global isFinite, JavaScript ka edhe metodën Number.isFinite. Ndryshe nga është e Finite, ai nuk e detyron argumentin të konvertohet në numër.

IsFinite ("73"); // true Number.isFinite("73"); // e rreme

funksioni është NaN

Funksioni isNaN është krijuar për të përcaktuar nëse një argument është një numër apo mund të konvertohet në një. Nëse po, atëherë funksioni isNaN kthen false. Përndryshe kthehet e vërtetë.

IsNaN(NaN); //true isNaN("25px"); //e vërtetë, sepse 20px nuk është një numër isNaN(25.5); //false ështëNaN("25.5"); //false ështëNaN(" "); //false, sepse një hapësirë ​​ose disa hapësira konvertohet në 0 isNaN(null); //false, sepse null konvertohet në 0 isNaN(true); //false, sepse true është konvertuar në 1 isNaN(false); //false, sepse false konvertohet në 0

Nëse ky veprim duhet të kryhet pa një tip cast, atëherë përdorni metodën Number.isNaN. Kjo metodë u fut në gjuhë duke filluar me ECMAScript 6.

Si të konvertohet në mënyrë eksplicite një varg në një numër?

Ju mund të konvertoni në mënyrë të qartë një varg në një numër duke përdorur metodat e mëposhtme:

1. Përdorni operator unar +, e cila duhet të vendoset përpara vlerës.

+"7.35"; // 7.35 +"tekst"; // NaN

Kjo metodë injoron hapësirat në fillim dhe në fund të rreshtit, si dhe \n (furnizimi i linjës).

+" 7.35"; //7.35 +"7.35 \n "; //7.35

Duke përdorur këtë metodë, duhet t'i kushtoni vëmendje faktit që një varg bosh ose një varg i përbërë nga hapësira dhe \n konvertohet në numrin 0. Përveç kësaj, ai gjithashtu konverton llojin e të dhënave null dhe vlerat Boolean në një numër .

Null; //0 +e vërtetë; //1 +false; //0 +" "; //0

2. Funksioni ParseInt. Ky funksion është krijuar për të konvertuar argument në numër të plotë. Ndryshe nga përdorimi operator unar +, kjo metodë ju lejon të konvertoni një varg në një numër në të cilin jo të gjithë personazhet janë numerikë. Fillon të konvertojë vargun, duke filluar nga karakteri i parë. Dhe sapo ndeshet me një karakter jonumerik, ky funksion ndalon punën e tij dhe kthen numrin që rezulton.

ParseInt ("18 px"); //18 parseInt("33.3%"); //33

Ky funksion mund të funksionojë me sisteme të ndryshme numrash (binar, oktal, dhjetor, heksadecimal). Baza e sistemit të numrave specifikohet duke përdorur 2 argumente.

ParseInt ("18px", 10); //18 parseInt("33.3%", 10); //33 parseInt("101",2); //5 parseInt("B5",16); //181

Përveç funksionit parseInt, JavaScript ka metodën Number.parseInt. Kjo metodë nuk është e ndryshme nga funksioni parseInt dhe është futur në JavaScript me specifikimin ECMASCRIPT 2015 (6).

3. funksioni parseFloat. Funksioni parseFloat është i ngjashëm me parseInt, përveç që ju lejon të konvertoni argumentin në një numër thyesor.

ParseFloat ("33.3%"); //33.3

Përveç kësaj, funksioni parseFloat, ndryshe nga parseInt, nuk ka 2 argumente, dhe për këtë arsye ai gjithmonë përpiqet ta trajtojë vargun si një numër në sistemin e shënimeve dhjetore.

ParseFloat ("3.14"); parseFloat ("314e-2"); parseFloat ("0.0314E+2");

Përveç funksionit parseFloat, JavaScript ka metodën Number.parseFloat. Kjo metodë nuk është e ndryshme nga funksioni parseFloat dhe është futur në JavaScript me specifikimin ECMASCRIPT 2015 (6).

Shndërrimi i një numri në një varg

Ju mund ta ktheni një numër në një varg duke përdorur metodën toString.

(12.8).toString(); //"12.8"

Metoda toString gjithashtu ju lejon të specifikoni bazën e sistemit të numrave, duke marrë parasysh të cilat ju duhet të konvertoni në mënyrë eksplicite numrin në një varg:

(255).toString(16); //"ff"

Si të kontrolloni nëse një ndryshore është një numër

Ju mund të përcaktoni nëse vlera e një ndryshoreje është një numër duke përdorur një nga metodat e mëposhtme:

1. Përdorimi i funksioneve isNaN dhe isFinite:

// myVar është një variabël nëse (!isNaN(parseFloat(myVar)) && isFinite(parseFloat(myVar))) ( //myVar është një numër ose mund të hidhet në të);

Si funksion:

// funksioni i funksionit ështëNumerik(vlera) (kthimi !isNaN(parseFloat(vlera)) && isFinite(parseFloat(vlera)); ) // përdorni var myVar = "12px"; console.log(isNumeric(myVar)); //e vërtetë

Kjo metodë ju lejon të përcaktoni nëse vlera e specifikuar është një numër ose mund të konvertohet në një. Ky opsion nuk numëron vargun bosh, vargun e hapësirave, null, Infinity, -Infinity, true dhe false si numër.

2. Duke përdorur operatorin tipof dhe funksionet isFinite, isNaN:

// funksioni që kontrollon nëse vlera është një funksion numëror ështëNumber(vlera) (kthimi i llojit të vlerës === "number" && isFinite(value) && !isNaN(value); }; // использование функции isNumber isNumber(18); //true // использование функций для проверки текстовых значений isNumber(parseFloat("")); //false isNumber(parseFloat("Infinity")); //false isNumber(parseFloat("12px")); //true !}

Ky funksion përcakton nëse vlera e specifikuar është e tipit Number dhe nëse është një nga vlerat speciale Infinity, -Infinity dhe NaN. Nëse po, atëherë ky funksion kthehet i vërtetë.

3. Përdorimi i metodës ECMAScript 6 Number.isInteger(value). Kjo metodë ju lejon të përcaktoni nëse vlera e specifikuar është një numër i plotë.

Numri.isNumri i plotë ("20"); //false, sepse kjo metodë nuk konverton një varg në një numër Number.isInteger(20); //e vërtetë, sepse kjo vlerë është një numër

Numrat çift dhe tek

Ju mund të kontrolloni nëse një numër është çift apo tek duke përdorur funksionet e mëposhtme:

// Funksioni për kontrollimin e një numri për funksionin e barazisë çift ështëEven(n) ( kthen n % 2 == 0; ) // Funksioni për kontrollimin e një numri për funksionin e barazisë tek ështëOdd(n) ( kthen Math.abs(n % 2) == 1;

Por, përpara se të kryeni një kontroll të tillë, këshillohet të siguroheni që vlera e specifikuar është një numër:

Vlera = 20; if (Number.isInteger(vlera)) ( if (isEven(vlera)) ( console.log("Number" + value.toString() + " - çift"); ) )

Numrat kryesorë në Javascript

Le të shohim një shembull në të cilin do të shfaqim numrat e thjeshtë nga 2 në 100 duke përdorur Javascript.

// Funksioni që kontrollon nëse një numër është funksioni kryesor ështëPrime(vlera) (< 2) return false; var max=Math.floor(Math.sqrt(value)); for (var i = 2; i< = max; i++) { if (value%i==0) { return false; } } return true; } // создать массив, который будет содержать простые числа от 2 до 100 var primaryNumber = ; for (var i = 2; i <= 100; i++) { if(isPrime(i)) primaryNumber.push(i); } // вывести в консоль простые числа от 2 до 100 console.log(primaryNumber);

Rrumbullakimi i një numri në Javascript

Ka mënyra të ndryshme për të rrumbullakosur një thyesë në një numër të plotë në JavaScript.

1. Përdorimi i metodave Math.floor, Math.ceil dhe Math.round të krijuara posaçërisht për këtë. Metoda Math.floor rrumbullakos një fraksion poshtë në numrin e plotë më të afërt, d.m.th. thjesht hedh poshtë pjesën thyesore. Math.tavan rrumbullakos një thyesë deri në numrin e plotë më të afërt. Math.rrumbullakos një numër lart ose poshtë në varësi të vlerës së pjesës thyesore. Nëse pjesa e pjesshme është më e madhe ose e barabartë me 0,5, atëherë lart, përndryshe kthesa është poshtë.

Console.log (Math.floor(7.9)); //7 console.log(Math.ceil(7.2)); //8 console.log(Math.round(7.5)); //8

2. Përdorimi i metodës toFixed (precision). Kjo metodë rrumbullakon pjesën thyesore të një numri në një saktësi të caktuar. Rezultati i rrumbullakimit kthehet si varg.

Console.log(7.987.toFixed(2)); //"7.99"

Nëse nuk ka numra dhjetorë të mjaftueshëm për të formuar saktësinë e specifikuar të numrit, atëherë ai është i mbushur me zero.

Console.log(7.987.toFixed(5)); //"7.98700"

3. Përdorimi i metodës toPrecision(saktësia). Kjo metodë paraqet një numër me një saktësi të caktuar. Në të njëjtën kohë, ai mund të rrumbullakos jo vetëm thyesoren, por edhe të gjithë pjesën e numrit. Në varësi të rezultatit, kjo metodë mund të paraqesë numrin që rezulton me një pikë fikse ose në formë eksponenciale.

Console.log((1001).toPrecision(2)); //"1.0e+3" console.log((1001).toPrecision(5)); //"1001.0" console.log((12.4).toPrecision(1)); //"1e+1" console.log((12.4).toPrecision(2)); //"12" console.log((12.4).toPrecision(3)); //"12.4" console.log((12.4).toPrecision(5)); //"12.400"

4. Përdorimi i operatorëve logjik NOT ose OR.

//nëpërmjet konsolës së mohimit të dyfishtë logjik.log(~~7.9); //7 // duke përdorur OSE logjike me zero: console.log(7.9^0); //7

Pjesë e plotë dhe thyesore e një numri

Ju mund të merrni pjesën e plotë të një numri duke përdorur metodat Math.floor() dhe parseInt():

Console.log (Math.floor(7.21)); // 7 console.log(parseInt(7.21)); // 7

Ju mund të merrni pjesën thyesore të një numri duke përdorur operatorin përqindje (%). Ky operator kthen mbetjen që do të fitohet nga pjesëtimi i numrit të parë me të dytin. Në këtë rast, duhet të përdorni 1 si numrin e dytë.

Console.log (7.21%1); // 0.20999999999999996 // saktë deri në 2 shifra dhjetore console.log((7.21%1).toFixed(2)); // "0.21"

Për më tepër, pjesa e pjesshme mund të merret gjithashtu duke përdorur llogaritjet:

numri var = 7,21; var fraksionNumber = numri - Math.floor(Math.abs(numri)); konsol.log (fraksionNumber); // 0.20999999999999996

A është numri i pjesëtueshëm me një numër të plotë?

Ju mund të përcaktoni nëse një numër është i pjesëtueshëm me një numër të plotë duke përdorur operatorin përqindje:

numri var = 9; // nëse pjesa e mbetur e numrit pjesëtuar me 3 është 0, atëherë po, përndryshe jo nëse (numri%3==0) ( console.log ("Numri " + numri + " është i pjesëtueshëm me 3"); ) else ( log ("Numri " + numri + " nuk ndahet me 3");

Formatimi i numrave

Në JavaScript, metoda toLocaleString() ju lejon të formatoni daljen e një numri në përputhje me standardet rajonale (cilësimet e gjuhës së sistemit operativ).

Për shembull, le të formatojmë një numër në përputhje me standardet rajonale që janë instaluar në sistem si parazgjedhje:

numri var = 345,46; console.log(number.toLocaleString()); //"345.46"

Për shembull, le të formatojmë numrin në përputhje me standardet rajonale të Rusisë (ru):

Console.log((108.1).toLocaleString("ru-RU")); //"108.1"

Kjo metodë mund të përdoret gjithashtu për të formatuar një numër si monedhë:

Console.log((2540.125).toLocaleString("ru-RU",(stili:"monedha", monedha:"RUB"))); //"2,540.13 ₽" console.log((89.3).toLocaleString("ru-RU",(stili:"monedha", monedha:"USD"))); //"89.30 $" console.log((2301.99).toLocaleString("ru-RU",(stili:"monedha", monedha:"EUR"))); //"2,301,99 €"

Paraqitja e një numri si përqindje:

Console.log((0.45).toLocaleString("ru-RU",(stili:"përqind"))); //"45%"

Ndani një numër në shifra (përdorni vetinë Grouping):

Console.log((125452.32).toLocaleString("ru-RU",(useGrouping:true))); //"125,452.32"

Shtypni një numër me një numër të caktuar shifrash (2) pas pikës dhjetore:

Console.log((1240.4564).toLocaleString("ru-RU",(minimumFractionDigits:2, maximumFractionDigits:2))); //"1,240.46"

Krahasimi i numrave

Operatorët e mëposhtëm përdoren për të krahasuar numrat në JavaScript: == (e barabartë), != (jo e barabartë), > (më e madhe se),< (меньше), >= (më e madhe se ose e barabartë me),<= (меньше или равно).

Për shembull, le të krahasojmë dy numra:

Console.log(2>3); //false console.log(5>=3); //e vërtetë

Kur krahasoni numrat me një pjesë të pjesshme, është e nevojshme të merren parasysh gabimet që mund të lindin gjatë këtyre llogaritjeve.

Për shembull, në JavaScript shuma e numrave (0.2 + 0.4) nuk është e barabartë me 0.6:

Console.log((0.2+0.4)==0.6); //e rreme

Gabimet ndodhin sepse një kompjuter ose një pajisje tjetër elektronike kryen të gjitha llogaritjet në sistemin e numrave të dytë. Ato. Para se të kryejë ndonjë veprim, kompjuteri duhet së pari të konvertojë numrat e paraqitur në shprehje në sistemin e 2-të të numrave. Por jo çdo numër dhjetor thyesor mund të përfaqësohet saktësisht në sistemin e 2-të të numrave.

Për shembull, numri 0.25 10 konvertohet saktësisht në binar.

0,125 × 2 = 0,25 | 0 0,25 × 2 = 0,5 | 0 0,5 × 2 = 1 | 1 0,125 10 = 0,001 2

Për shembull, numri 0.2 10 mund të shndërrohet në sistemin 2 vetëm me një saktësi të caktuar:

0,2 × 2 = 0,4 | 0 0,4 × 2 = 0,8 | 0 0,8 × 2 = 1,6 | 1 0,6 × 2 = 1,2 | 1 0,2 × 2 = 0,4 | 0 0,4 × 2 = 0,8 | 0 0,8 × 2 = 1,6 | 1 0,6 × 2 = 1,2 | 1 0,2 × 2 = 0,4 | 0 0,4 × 2 = 0,8 | 0 0,8 × 2 = 1,6 | 1 0,6 × 2 = 1,2 | 1 ... 0,2 10 = 0,001100110011... 2

Si rezultat, këto gabime do të ndikojnë në llogaritjen e shumës së dy numrave dhe në rezultatet e krahasimit. Ato. Rezulton se JavaScript në të vërtetë do ta shohë këtë hyrje si më poshtë:

0.6000000000000001==0.6

Kur llogaritni ose shfaqni numra me pjesë thyesore, gjithmonë duhet të tregoni saktësinë me të cilën dëshironi ta bëni këtë.

Për shembull, krahasoni numrat deri në 2 shifra dhjetore duke përdorur metodat toFixed() dhe toPrecision():

//metoda toFixed() console.log((0.2+0.4).toFixed(2)==(0.6).toFixed(2)); //true //metoda toPrecision() console.log((0.2+0.4).toPrecision(2)==(0.6).toPrecision(2)); //e vërtetë

Veprimet themelore matematikore

Operatorët matematikorë të mëposhtëm ekzistojnë në JavaScript: + (mbledhja), - (zbritja), * (shumëzimi), / (pjestimi), % (modulo), ++ (rritni një vlerë me 1), -- (zvogëloni një vlerë me 1).

6+3 //9 6-3 //3 6*3 //18 6/3 //2 6%3 //0, d.m.th. 6:3=2 => 6-3*2 => pushim(0) 5%2 //1, d.m.th. 5:2=2(.5) => 5-2*2 => pushim(1) 7.3%2 //1.3, d.m.th. 7.3:2=3(.65) => 7.3-2*3 => pushim(1.3) //shenja e rezultatit të veprimit % është e barabartë me shenjën e vlerës së parë -9%2.5 //-1.5 , d.m.th. 9:2.5=3(.6) => 9-2.5*3 => pushim (1.5) -9%-2.5 //-1.5, d.m.th. 9:2.5=3(.6) => 9-2.5*3 => pushim (1.5) -2%5 //-2, d.m.th. 2:5=0(.4) => 2-5*0 => pushim(2) x = 3; konsol.log(x++); // nxjerr 3, pastaj vendos 4 console.log(x); //4 x = 3; konsol.log(++x); //bashket 4 dhe nxjerr x = 5; konsol.log(x--); // nxjerr 5, pastaj vendos 4 console.log(x); //4 x = 5; konsol.log(--x); //bashkësitë 4 dhe daljet Përveç kësaj, JavaScript ka operatorë të kombinuar: x+=y (x=x+y), x-=y (x=x-y), x*=y (x=x*y), x/= y (x=x/y), x%=y (x=x%y).

© 2024 ermake.ru -- Rreth riparimit të PC - Portali informacioni