Js rrumbullakosni në të qindtën më të afërt. Rregulla të thjeshta rrumbullakimi në javascript. Ne studiojmë metodat dhe i zbatojmë ato në praktikë

Shpesh rezultati i llogaritjeve është një numër me një numër të madh të numrave dhjetorë. Nëse ky numër përdoret për llogaritjet e mëtejshme, atëherë mund të lihet ashtu siç është. Por ndonjëherë një numër duhet të rrumbullakoset, për shembull për t'u shfaqur në një faqe. JavaScript rrumbullakos numrat duke përdorur disa metoda.

Metoda Math.round() rrumbullakos vlerën në një numër të plotë.

Math.round (numri)

Numrat rrumbullakohen sipas rregullave matematikore. Kjo do të thotë, nëse pas pikës dhjetore ka një numër nga 0 në 4, atëherë pjesa e pjesshme thjesht hidhet poshtë. Dhe nëse pas pikës dhjetore ka një numër nga 5 në 9, atëherë pjesa thyesore hidhet poshtë dhe një i shtohet të gjithë pjesës. shembull:

JavaScript:

Ka dy metoda të tjera që rrumbullakosin një numër në një numër të plotë. Metoda Math.floor() rrumbullakoset poshtë. Hedh pjesën thyesore të numrit. Dhe metoda Math.ceil() rrumbullakoset lart. Hedh pjesën thyesore dhe i shton një të gjithë pjesës. Shembull:

Sigurisht, 5 - (-2) është 5+2. Mos harroni se nuk do të merrni numrin 5 në këtë formulë. Maksimumi do të jetë 4.999999999. Vlerat që rezultojnë mund të rrumbullakosen në saktësinë e kërkuar.

Nëse nevojiten vetëm numra të plotë, atëherë vlerat që rezultojnë mund të rrumbullakosen në numrin e plotë më të afërt. Një duhet shtuar në maksimum që edhe ky maksimum të jetë i mundur. Formula duket si kjo:

numër i plotë = Math.kat (min + matematikë. rastësi () * (maksimumi + 1 - min)

Le të shtypim numrat nga 10 në 15:

20
21
22
23
24

për (i=1; i<=10; i++) { rand = Math.floor(10 + Math.random() * (15 + 1 - 10)); console.log(rand); }

Krahasimi i numrave thyesorë

Llogaritjet matematikore kanë një veçori - rezultatet e tyre nuk janë gjithmonë absolutisht të sakta. Ky është një problem jo vetëm me JavaScript, por edhe me shumicën e gjuhëve programuese. Kjo ndodh sepse numrat dhe të dhënat e tjera shndërrohen në kod binar dhe vetëm atëherë bëhen llogaritjet me to. Në shumicën e rasteve, kjo nuk çon në ndonjë vështirësi të veçantë, nganjëherë llogaritjet rezultojnë në një numër me një numër të madh vendesh dhjetore. Por ekziston një situatë kur pasaktësia e llogaritjes ndikon në funksionimin e programit. Ky është një krahasim i numrave. Nëse krahasohen numra të ndryshëm, atëherë gjithçka duhet të jetë mirë.

5.1 < 5.2

Por nëse llogaritja rezulton në dy numra thyesorë identikë, atëherë rezultati i krahasimit të tyre nuk është i parashikueshëm. Ato mund të jenë të barabarta, ose njëra mund të jetë më e madhe se tjetra. Kur një skenar përdor një krahasim të tillë, duhet të kontrolloni nëse skripti funksionon siç duhet. Nëse ka një gabim në të, atëherë duhet të rrumbullakosni vlerat që po krahasohen.

Metoda të tjera matematikore

Ka mjaft metoda për llogaritje të ndryshme matematikore. Ato janë të thjeshta dhe nuk kërkojnë shpjegime shtesë. Metodat që përdoren shpesh janë renditur në tabelën e mëposhtme:

Provoni të bëni disa llogaritje duke përdorur këto metoda.

Përshëndetje, adhurues të JavaScript. Tashmë e keni vënë re se kjo gjuhë është shumë e jashtëzakonshme dhe në çdo seksion dallohet për veçoritë dhe zgjidhjet e pazakonta teknike. Prandaj, botimi i sotëm i kushtohet temës: "Rrumbullakimi i JavaScript".

Pas leximit të artikullit aktual, do të mësoni pse është e nevojshme të rrumbullakoni numrat, cilat metoda dhe veti në js e kryejnë këtë funksion, si dhe çfarë e dallon ndarjen me 0. Pa ndryshuar parimet e mia, unë do t'i bashkëngjit shembuj në pikat kryesore të materiale dhe përshkruani çdo veprim në detaje. Tani le të fillojmë të mësojmë!

Shënime të rëndësishme për numrat

Së pari, mbani mend se në js të gjitha llojet e numrave (fraksional dhe numër i plotë) i përkasin llojit Numri. Përveç kësaj, ato janë të gjitha 64-bit, pasi ato ruhen në formatin “double precision”, i cili njihet edhe si standardi IEEE-754.

Variablat numerikë krijohen në mënyrën e zakonshme:

var numb = 35; // numër natyror

var drob = 0,93; //paraqitja dhjetore

var numb16 = 0xFF; //Sistemi numrash heksadecimal

Mbështet paraqitje të tjera numerike. Pra, ju gjithashtu mund të krijoni numra me pikë lundruese (ata quhen edhe "numra shkencorë").

Tani ka mbështetje për një metodë shumë interesante toLocaleString(), i cili formaton të gjithë parametrat numerikë sipas specifikimeve të përshkruara në ECMA 402. Falë kësaj, numrat e mëdhenj, numrat e telefonit, monedhat dhe madje edhe përqindjet shfaqen bukur në kutinë e dialogut.

var num = 714000.80;

alarm (num.toLocaleString());

Për të punuar me elementë të llojit Number, një objekt i tërë global u sigurua me një grup funksionesh të ndryshme matematikore, emri i të cilit Math.

Përveç kësaj, ka metoda të tjera që rrumbullakosin vlerat numerike në numra të plotë, të dhjetat, të qindtat, etj. Le t'i shikojmë të gjitha në më shumë detaje.

Matematika e Madhe dhe e Fuqishme

Objekti global i Math përfshin një larmi të madhe funksionesh matematikore dhe trigonometrike. Ky është një objekt shumë i nevojshëm dhe shpesh ndihmon zhvilluesit kur punojnë me të dhëna dixhitale.

Ka analoge të matematikës në platforma të tjera. Për shembull, në gjuhët e njohura si Java dhe C#, matematika është një klasë që mbështet të gjitha të njëjtat funksione standarde. Pra, siç mund ta shihni, ky instrument është vërtet i madh dhe i fuqishëm.

Tani dua të kaloj nëpër metodat specifike përgjegjëse për rrumbullakimin dhe të flas për to në detaje.

Math.floor()

Do të filloj me Math.kat. Kushtojini vëmendje emrit të metodës. Logjikisht, bëhet e qartë se meqenëse po flasim për rrumbullakim, dhe përkthimi fjalë për fjalë i fjalës "dysheme" do të thotë "dysheme", atëherë ky mjet do të rrumbullakos vlerat e përpunuara poshtë.

Është gjithashtu e mundur që numri i përpunuar duke përdorur këtë funksion të mbetet i njëjtë. Kjo për shkak se rrumbullakimi kryhet sipas një pabarazie jo strikte (<=). Таким образом, при отработке этой строчки кода:

alarm (Matematika.kati (4.5));

Përgjigja do të jetë numri 4.

Math.tavan ()

Përsëri, shikoni emrin (në këtë mënyrë materiali përthithet më shpejt). Nëse dikush nuk e di, "tavan" do të thotë "tavan". Kjo do të thotë që të dhënat numerike do të rrumbullakosen duke përdorur një pabarazi jo të rreptë (>=).

alarm (Math.ceil (4.5));

Siç mund ta keni marrë me mend, përgjigja do të jetë numri 5.

Math.round ()

Kjo metodë rrumbullakos një thyesë në numrin e plotë më të afërt. Pra, nëse pjesa e pjesshme është në rangun nga 0 në 0,5 jo përfshirëse, atëherë rrumbullakimi ndodh në një vlerë më të vogël. Dhe nëse pjesa thyesore është në rangun nga 0.5 përfshirëse deri te numri i plotë tjetër, atëherë ajo rrumbullakohet në një numër të plotë më të madh.

alert(Math.round(4.5));

Shpresoj që të gjithë menduan ose thanë se përgjigja e saktë është 5.

Disa metoda të tjera

JavaScript ka gjithashtu 2 metoda të tjera që merren me rrumbullakimin e paraqitjeve numerike. Megjithatë, ato janë disi të ndryshme.

Do të flasim për mjete të tilla si i rregulluar () Dhe toPrecision (). Ata janë përgjegjës jo vetëm për rrumbullakimin, por edhe për saktësinë e tij ndaj karaktereve të caktuara. Le të gërmojmë më thellë.

për të rregulluar ()

Duke përdorur këtë mekanizëm, mund të specifikoni në sa numra dhjetorë duhet të rrumbullakoset vlera. Metoda e kthen rezultatin si një varg. Më poshtë kam bashkangjitur një opsion me tre opsione të ndryshme. Analizoni përgjigjet e marra.

var num = 5656,9393;

dokument.writeln(num.toFixed()); // 5657

dokument.writeln(num.toFixed(2)); // 5656,94

dokument.writeln(num.toFixed(7)); // 5656.9393000

Siç mund ta shihni, nëse nuk specifikoni një argument, atëherë toFixed ()) do të rrumbullakos vlerën thyesore tek e tëra numrat. Linja e tretë është e rrumbullakosur deri në 2 karaktere, dhe në të katërtin, për shkak të parametrit “7”, janë shtuar edhe tre 0 të tjera.

toPrecision ()

Kjo metodë funksionon pak më ndryshe. Në vend të argumentit, mund të lini një hapësirë ​​boshe ose të vendosni një parametër. Megjithatë, kjo e fundit do të rrumbullakos numrat në numrin e caktuar të shifrave, pavarësisht nga presja. Këtu janë rezultatet e prodhuara nga programi, të rishkruara nga shembulli i mëparshëm:

var num = 5656,9393;

dokument.writeln(num.toPrecision()); // 5656.9393

dokument.writeln(num.toPrecision(2)); // 5.7e+3

dokument.writeln(num.toPrecision(7)); // 5656.939

Veçori e pjesëtimit me 0 në js

Siç e dini nga mësimet e matematikës, nuk mund të pjesëtoni me zero. Ky rregull u mor si bazë nga shumica e krijuesve të gjuhëve të programimit. Prandaj, kur pjesëtohet me zero, të gjitha programet gjenerojnë një gabim.

Sidoqoftë, JavaScript shkëlqen edhe këtu. Pra, gjatë ekzekutimit të një operacioni të tillë nuk lindin mesazhe bug... sepse një operacion i tillë kthehet "Pafundësi"!

Pse është kështu? Siç dihet nga të njëjtat shkenca matematikore, sa më i vogël të jetë pjesëtuesi, aq më i madh rezulton numri. Kjo është arsyeja pse krijuesit e kësaj gjuhe të orientuar nga prototipi vendosën të braktisin shabllonet dhe të shkojnë në rrugën e tyre.

Për ata që po hasin vlerën Infinity për herë të parë, unë kam shpjeguar veçoritë e tij më poshtë.

Pafundësi – do të thotë pafundësi dhe i përgjigjet plotësisht shenjës matematikore ∞.

Mund të jetë negative. Ruhen gjithashtu të gjitha rregullat standarde për të punuar me operatorët aritmetikë.

alarmi (12/ 0); // Pafundësi

alarm (12.34/ 0); // Pafundësi

alarmi (-3/ 0); // -Pafundësi

Unë mendoj se do të përfundoj këtu. Nëse ju pëlqeu botimi, sigurohuni që të regjistroheni në blogun tim. Mos u bëni të pangopur me lidhjet për artikuj interesantë dhe ndajini ato me miqtë tuaj. Mirupafshim!

Përshëndetje, Roman Chueshov

Lexoni: 194 herë

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?

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

0.1 * 0.2; > 0.020000000000000004

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.

Rrumbullakimi i numrave 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 e një numri të madh të numrave dhjetorë. 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); )

Aplikacion:

raundi (1.005,2); > 1.01

Nëse keni nevojë për një zgjidhje edhe më të qëndrueshme 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 krahasoni 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, 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ë gjithë shfletuesit 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.tavan(-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 raundin 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;

Ju mund të krijoni një funksion ose zgjerim të klasës Number:

Number.prototype.clamp = funksion(min, maksimum) (kthim Math.min(Math.max(kjo, min), max); );

Përdorimi:

(numInput).clamp(lowBound, highBound);

Rrumbullakimi Gaussian

Rrumbullakimi Gaussian ("bankar", konvergjente ose holandeze) është një metodë rrumbullakimi pa gabime statistikore. Standard Rrumbullakimi në JavaScript ndonjëherë jep gabime në një drejtim më të madh. Rrumbullakimi Gaussian shmang këtë gabim duke rrumbullakosur në numrin çift më të afërt. Zgjidhja më e mirë që di.

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ëCents); > "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) (kthim 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 matematikore 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) (kthim 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(kjo, 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. Një zgjidhje 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 harta të pozicionit 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.667731993 px; )
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ë 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.rendi (); > "kajsi", "kungull me gjalpë", "pjepër"]
Megjithatë, ne hasim në një problem sapo njëri nga elementët të jetë me shkronja të mëdha:

Le fruta = ["kungull me gjalpë", "kajsi", "Kantalope"]; fruti.sort(); > "Pantalup", "kajsi", "kungull me gjalpë"]
Kjo ndodh sepse, si parazgjedhje, klasifikuesi krahason karakterin e parë të përfaqësuar në Unicode. Unicode është një kod unik për çdo karakter, 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 ose të konvertojmë të gjithë elementët përkohësisht në shkronja të vogla, ose të përcaktojmë renditjen tonë 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", ("ndjeshmëri": "bazë")); )); ) 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 në 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
Për momentin, mbështetja për këtë operator është mjaft e kufizuar, kështu që nuk rekomandohet përdorimi i tij.

Funksioni i fuqisë mund të jetë i dobishëm në një sërë situatash. 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 të vini re se 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 matematikë.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
Megjithatë, 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 e anglishtes, 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.

Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. , Ju lutem.

Etiketa: Shto etiketa 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ëCents); > "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) (kthim 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 matematikore 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) (kthim 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(kjo, 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. Një zgjidhje 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 harta të pozicionit 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.667731993 px; )
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ë 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.rendi (); > "kajsi", "kungull me gjalpë", "pjepër"]
Megjithatë, ne hasim në një problem sapo njëri nga elementët të jetë me shkronja të mëdha:

Le fruta = ["kungull me gjalpë", "kajsi", "Kantalope"]; fruti.sort(); > "Pantalup", "kajsi", "kungull me gjalpë"]
Kjo ndodh sepse, si parazgjedhje, klasifikuesi krahason karakterin e parë të përfaqësuar në Unicode. Unicode është një kod unik për çdo karakter, 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 ose të konvertojmë të gjithë elementët përkohësisht në shkronja të vogla, ose të përcaktojmë renditjen tonë 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", ("ndjeshmëri": "bazë")); )); ) 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 në 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
Për momentin, mbështetja për këtë operator është mjaft e kufizuar, kështu që nuk rekomandohet përdorimi i tij.

Funksioni i fuqisë mund të jetë i dobishëm në një sërë situatash. 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 të vini re se 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 matematikë.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
Megjithatë, 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 e anglishtes, 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.

Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. Eja, të lutem.

Etiketa:
  • javascript
  • matematikë
Shto etiketa


Top