Javascript rotunjind până la 2 caractere. Metode de rotunjire numere în JavaScript

Bună ziua, iubitorii javascript-a. Ați observat deja că această limbă este foarte extraordinară și în fiecare secțiune se remarcă pentru particularitățile sale și soluțiile tehnice neobișnuite. Prin urmare, publicația de astăzi este dedicată subiectului: rotunjirea JavaScript.

După ce ați citit articolul curent, veți afla de ce este necesar să rotunjim numerele, ce metode și proprietăți în JS efectuează această funcție, precum și divizia de 0. Fără a schimba principiile, voi atașa exemple la punctele cheie ale materialul și scrieți fiecare acțiune în detaliu. Acum, să începem să învățăm!

Note importante despre numere

Pentru a începe, amintiți-vă că în JS toate tipurile de numere (fracționate și integer) se referă la tipul Număr. În plus, toate acestea sunt pe 64 de biți, deoarece sunt stocate în formatul "dublu de precizie", care este cunoscut și sub standardul IEEE-754.

Crearea variabilelor numerice cu modul obișnuit:

var numarge \u003d 35; // numar natural

var drob \u003d 0,93; // Reprezentarea zecimală

var numb16 \u003d 0xFF; // Sistemul 16-Richery

Suportă alte vizualizări numerice. Deci, puteți crea și numere cu un punct plutitor (ele sunt numite uneori "numere în format științific").

În sprijinul a apărut pentru o metodă foarte interesantă tolocalestring ()Care formează toți parametrii numerici conform specificațiilor prescrise în ECMA 402. Datorită acestor numere mari, numerele de telefon, valutele și chiar procentele sunt afișate frumos în caseta de dialog.

var num \u003d 714000.80;

alertă (Num.tolocaleString ());

Pentru a lucra cu elemente de tip de tip, un obiect global întreg, cu o grămadă de tot felul de funcții matematice, al cărui nume Matematică..

În plus, există și alte metode care efectuează rotunjirea valorilor numerice la întregi, până la zeci, sute, etc. Luați în considerare tot mai mult.

Matematică mare și puternică

Obiectul Global Math include un număr mare de diferite funcții matematice și trigonometrice. Acesta este un obiect foarte necesar și adesea taie dezvoltatorii atunci când lucrează cu date digitale.

Pe alte platforme, există matematică analogies. De exemplu, în limbi populare, cum ar fi Java și C #, matematica este o clasă care susține toate funcțiile standard. Deci, după cum vedeți acest instrument este foarte mare și puternic.

Acum vreau să trec prin metodele specifice responsabile de rotunjire și să le spun despre ele în detaliu.

Matemat.floor ()

Voi începe S. Matematică.podea. Fiți atenți la numele metodei. Este logic, devine clar că, deoarece vorbim despre rotunjire și traducerea literală a cuvântului "podea" înseamnă "podea", atunci acest instrument rotă valorile procesate într-un drept mai mic.

O opțiune este, de asemenea, posibilă atunci când numărul procesat care utilizează această funcție rămâne același. Toate pentru că rotunjirea se desfășoară pe inegalitatea non-neurală (<=). Таким образом, при отработке этой строчки кода:

alertă (matematică (4,5));

răspunsul va fi numărul 4.

Mateth.ceil ()

Din nou, uitați-vă la numele (într-o astfel de metodă, materialul este absorbit rapid). Dacă cineva nu știe, "Ceil" înseamnă "plafon". Aceasta înseamnă că rotunjirea datelor numerice vor fi efectuate în cea mai mare parte, folosind o non-inegalitate (\u003e \u003d).

alertă (matematică (4,5));

După cum ați ghicit deja, răspunsul va fi numărul 5.

Matemath.round ()

Această metodă rundă numărul fracționat la cel mai apropiat întreg. Deci, dacă partea fracțională este în intervalul de la 0 și la 0,5 nu incluziv, rotunjirea are loc la o valoare mai mică. Și dacă partea fracțională este în intervalul de la 0,5 și până la întregul număr, acesta este rotunjit la un întreg mai mare.

alertă (matematică (4.5));

Sper că toată lumea sa gândit sau le-a spus răspunsul corect - 5.

Mai multe metode

JavaScript are, de asemenea, alte 2 metode care sunt implicate în rotunjirea reprezentărilor numerice. Cu toate acestea, ele sunt oarecum diferite.

Va fi despre astfel de instrumente ca și tOFIXED () și toprecision (). Ei răspund nu doar pentru rotunjire, ci pentru acuratețea sa la anumite semne. Să luptăm mai adânc.

tOFIXED ()

Cu acest mecanism, puteți specifica, la câte semne după ce virgulă trebuie să rotunjim valoarea. Metoda returnează rezultatul ca șir. Mai jos am atașat o opțiune cu trei opțiuni diferite. Analizați răspunsurile primite.

var num \u003d 5656.9393;

document.writeln (Num.tofixed ()); // 5657.

document.writeln (Num.tofixed (2)); // 5656.94.

document.writeln (Num.tofixed (7)); // 5656.9393000.

După cum se poate vedea, dacă nu specificați argumentul, atunci TOFIXED ()) Runde de valoare fracționată la întreg numere. În a treia linie completată rotunjire până la 2 caractereȘi în al patrulea - din cauza parametrului "7", au fost abordate încă trei 0.

toprecision ()

Această metodă acționează oarecum diferit. La locul argumentului, puteți lăsa atât un loc gol, și setați parametrul. Cu toate acestea, acesta din urmă va învârti numerele înainte de numărul specificat de numere, care nu acordă atenție virgulei. Iată rezultatele programului rescris din trecut:

var num \u003d 5656.9393;

document.writeln (Num.toprecision ()); // 5656.9393.

document.writeln (Num.toprecision (2)); // 5.7e + 3

document.writeln (Num.toprecision (7)); // 5656.939.

Fișierul diviziei la 0 în JS

După cum este cunoscut din lecțiile din matematică, este imposibil să se împartă la zero. Această regulă a luat parte la majoritatea creatorilor de limbi de programare. Prin urmare, atunci când se împarte la zero, toate programele dau o eroare.

Cu toate acestea, JavaScript se distinge aici. Deci, în timpul executării unei astfel de operații, nu apar mesaje de eroare ... deoarece o astfel de operație se întoarce "Infinit"!

De ce așa? Așa cum este cunoscut din aceleași științe matematice, cu atât este mai mic separatorul, rezultatul este un număr mai mare. De aceea, creatorii acestui limbaj orientat spre prototip, au decis să abandoneze șabloanele și să meargă în felul lor.

Pentru cei care se confruntă mai întâi cu valoarea infinității, mai jos i-am explicat caracteristicile.

Infinit - înseamnă infinit și se potrivește pe deplin semnul matematic ∞.

Poate fi negativă. Toate regulile standard pentru lucrul cu operatorii aritmetici sunt, de asemenea, salvați.

alertă (12/0); // infinit.

alertă (12.34 / 0); // infinit.

alertă (-3 / 0); // -infinity.

Pe aceasta, poate și termina. Dacă vă place publicația, atunci asigurați-vă că vă abonați la blogul meu. Nu greși o referire la articole interesante și împărtășiți-le cu prietenii. Pa! Pa!



JavaScript-Matematică, rotunjire până la două zecimale (9)

Am următoarea sintaxă JavaScript:

Var cu discount \u003d matemath.round (100 - (preț / listprinric) * 100);

Acest lucru este rotunjit la un număr întreg. Cum pot reveni rezultatul cu două semne zecimale?

Iată un exemplu de lucru

VAL VALUE \u003d 200.2365455; Rezultat \u003d matemath.round (valoarea * 100) / 100 // Rezultatul va fi 200.24

Pentru prelucrarea rotunjită la orice număr de zecimale pentru majoritatea nevoilor, va fi suficientă funcție cu 2 linii de cod. Iată un exemplu de cod pentru joc.

Var testnum \u003d 134.9567654; VAR DECPL \u003d 2; var testres \u003d rotunddec (testnum, decpl); Alertă (TestNum + "rotunjită la locurile zecimale" + decpl + "este" + testres); Funcția RoundDec (NBR, DEC_LPLACES (VAR MULT \u003d MATH.POW (10, dec_places); retur matemath.round (BNR * mult) / mult;)

Cea mai bună și simplă soluție pe care am găsit-o este

Rundă de funcționare (numărul de retur (Math.ro (valoarea + e "+ zecimale) +" E - "+ zecimale);) Runda (1,005, 2); // 1.01.

Variația mică a răspunsului acceptat. TOFIXED (2) returnează șirul și veți obține întotdeauna două semne zecimale. Poate fi zero. Dacă doriți să suprimați zero (e) final (e), faceți-o:

Var discount \u003d + ((preț / listprinric) .tofixed (2));

Editat: Am constatat că pare a fi o eroare în Firefox 35.0.1, ceea ce înseamnă că cele de mai sus pot da nan unele valori.
Mi-am schimbat codul

Var cu discount \u003d matemath.round (preț / list * 100) / 100;

Acest lucru oferă un număr cu o precizie de două zecimale. Dacă aveți nevoie de trei, veți multiplica și împărțiți 1000 și așa mai departe.
OP vrea două zecimale de descărcare întotdeauna, dar dacă TOFIXED () este rupt în Firefox, trebuie mai întâi să o rezolvi.
Vedeți https://bugzilla.mozilla.org/show_bug.cgi?id\u003d1134388.

Pentru a obține un rezultat cu două semne zecimale, puteți face următoarele:

Var cu discount \u003d matemath.round ((100 - (preț / list) * 100) * 100) / 100;

Valoarea care trebuie rotunjită este înmulțită cu 100 pentru a salva primele două cifre, apoi împărțim la 100 pentru a obține rezultatul real.

Cred că cel mai bun mod pe care l-am văzut este înmulțit cu 10 pe număr de numere, apoi face matematică, și apoi în cele din urmă divizați 10 după numărul de numere. Iată o simplă funcție pe care o folosesc în texte tip scris:

Funcție rotundă (valoare: număr, cifre: număr) (valoare \u003d valoare * Math.pow (10, cifre); valoare \u003d matemath.round (valoare); valoare \u003d valoare / Math.pow (10, cifre); valoare de returnare; )

Sau JavaScript simplu:

Funcție rotundă (valoare, cifre) (dacă (! Cifre) (cifre) (cifre) (cifre \u003d 2;) valoare \u003d valoare * Math.pow (10, cifre); valoare \u003d matematică.round (valoare); valoare \u003d valoare / Math.pow (10 , cifre); valoarea retur;)

NOTĂ. - Consultați editarea 4 dacă precizia de 3 cifre este importantă.

Var cu discount \u003d (preț / listprinric) .tofixed (2);

tOFIXED este rotunjit în sus sau în jos pentru dvs., în funcție de valorile care depășesc 2 semne zecimale.

Schimbare. Așa cum am menționat de alții, acesta convertește rezultatul în șir. Pentru a evita acest lucru:

Var discount \u003d + ((preț / listprinric) .tofixed (2));

Editarea 2. - După cum sa menționat în comentarii, această funcție nu este efectuată cu o anumită precizie, de exemplu, în cazul 1.005, va reveni la 1,00 în loc de 1,01. Dacă acuratețea este importantă pentru o astfel de măsură, am găsit acest răspuns: https: //.com/a/32605063/1726511 Ce pare să funcționeze bine cu toate testele pe care le-am încercat.

O modificare minoră necesită, dar răspunsul indicat mai sus returnează numerele întregi atunci când este rotunjit la unul, de exemplu, 99.004 va reveni la 99 în loc de 99.00, care nu este perfect pentru afișarea prețului.

Editați 3. - Se pare că este vorba despre întoarcerea reală a încă mai răsucite unele numere, este editarea finală pare să funcționeze. Geez atât de multe reparații!

Var discount \u003d rotund ((preț / listprinric), 2); Funcția de rundă (n, cifre) (dacă (cifre \u003d\u003d\u003d nedefinite) (cifre \u003d 0;) var multiplicator \u003d matemath.pow (10, cifre); n \u003d parsefloat ((n * multiplicator) .pofixed (11)); var test \u003d (matemath.round (n) / multiplicator); retur + (test.tofixed (cifre));)

Editați 4. "Voi mă omorâți." Editați 3 eșuează pe numere negative, fără săpături în ce este mai ușor să faceți pur și simplu un număr negativ pozitiv înainte de a face rotunjirea, apoi returnați-o înapoi înainte de a reveni rezultatul.

Funcția de legătură (n, cifre) (var nativ \u003d false; dacă (cifre \u003d\u003d\u003d nedefinit) (cifre \u003d 0;) dacă (n< 0) { negative = true; n = n * -1; } var multiplicator = Math.pow(10, digits); n = parseFloat((n * multiplicator).toFixed(11)); n = (Math.round(n) / multiplicator).toFixed(2); if(negative) { n = (n * -1).toFixed(2); } return n; }

Cel mai rapid mod - mai rapid decât TOFIXED ():

Două decalile

x \u003d .123456 Rezultat \u003d matemath.round (x * 100) / 100 // Rezultat .12

Trei zecimalități

x \u003d .123456 rezultat \u003d matemath.round (x * 1000) / 1000 // Rezultat .123

Funcția rundă (Num, Dec) (Num \u003d Math.round (Num + E "+ Dec) Număr de retur (Num +" E - "+ Dec)) // Round la o zecimală de alegere: Runda (1.3453.2)

Buna ziua. Astăzi, în coloana JavaScript, vom analiza modul de a seta pe JavaScript numărul de seasoline din numerele de puncte plutitoare. De exemplu, trebuie să lăsați 3 semne zecimale la afișare sau doar două.

Sarcina: Numărul JavaScript de punct și virgulă

Deci, ne confruntăm cu sarcina: există un rezultat al calculelor, în care există numere înainte de punct și virgulă și după virgulă. Zecimal. Să presupunem că rezultatul sa dovedit a fi 1538.9891200153. Dar când ieșirea ar trebui să fie numărul care reflectă cantitatea, în cazul în care cantitatea de bancnote este de până la virgulă și după-coperți.

Există mai multe modalități de a rezolva această sarcină.

Soluția 1: Numărul JavaScript de punct și virgulă cu metoda tofecționată

tOFIXED este o metodă încorporată în JavaScript care este aplicată oricărui număr, precizia ia o rotunjire de precizie (adică numărul de caractere deasupra).

Var num \u003d 1538.9891200153; num_str \u003d num.tofixed (); // num_str \u003d 1538; num_str \u003d num.tofixed (2); //Num_str\u003d1538.98; num_str \u003d num.tofixed (5); //Num_str\u003d1538.98912;

Parametrul de precizie din această funcție ar trebui să fie de cel puțin 0 (nu ia valori negative) și nu mai mult de 20.

De asemenea, puteți face fără o variabilă, de exemplu, astfel:

Num_str \u003d (1538.9891200153) .Pofixed (2); //Num_str\u003d1538.98;

Soluția 2: Numărul JavaScript de punct și virgulă cu metoda Toprecision

Această soluție se bazează pe aceeași metodă JavaScript încorporată. O caracteristică distinctivă a acestei metode este că parametrul realizat la intrare nu indică acuratețea (numărul de punct și virgulă), ci numărul total de caractere (atât la virgulă, cât și după acesta).

Var num \u003d 1538.9891200153; num_str \u003d num.toprecizion (5); //Num_str\u003d1538.9; num_str \u003d num.toprecision (7); //Num_str\u003d1538.989;

Soluție fără semne după o virgulă: Numărul JavaScript de punct și virgulă

Dacă semnele zecimale trebuie să fie complet pliate, adică este necesar să rotunjim numărul fracționat în întregime, atunci puteți utiliza funcțiile matematicii: rotunde, tail și podea.
Runda rotundă într-o latură mare sau mai mică (în funcție de număr). Dacă valoarea după punct și virgulă este mai mare de jumătate, apoi se rotește pe întreaga parte, dacă este mai mică - la mai mică. Adică dacă 0,51 - va fi 1, dacă 0,49 - 0.

CEL - de la engleza. Plafonul este întotdeauna rotunjit în cea mai mare parte.

Podea - de la engleza. Paul rundă întotdeauna într-o parte mai mică.

Var num \u003d 1538.9891200153; num_str \u003d matemath.round (NU); // num_str \u003d 1539; num_str \u003d matemath.floor (NUM); // num_str \u003d 1538; num_str \u003d mateth.ceil (Num); // num_str \u003d 1539;

Asta e tot. Sper că această notă ți-a ajutat să rezolvi sarcina. Dacă ceva nu a reușit - Puneți întrebări utilizând butonul verde "Puneți o întrebare de către un specialist" sau în comentarii.

Adesea, calculele dau rezultate care nu corespund limitelor intervalelor dorite. Ca rezultat, trebuie să vă exercitați JavaScript rotund până la o anumită valoare.

De ce numere rotunde?

JavaScript nu storează numere întregi, deoarece valorile lor sunt prezentate sub forma unui număr de puncte plutitoare. Multe fracții nu pot fi reprezentate de un număr cu un anumit număr finit de punct și virgulă, astfel încât JavaScript poate genera rezultate, cum ar fi următoarele:

0.1 * 0.2; > 0.020000000000000004

În practică, nu va avea nici o importanță, deoarece vine vorba de eroare în 2 chinylonne. Dar acest lucru poate afecta rezultatul atunci când lucrați cu numere care reprezintă valorile supapei, procentul sau dimensiunea fișierului. Prin urmare, trebuie să faceți sau până la un anumit semn zecimal.

Rotunjind numerele zecimale

Pentru a "tăia" un număr zecimal, se utilizează metode TOFIXED () sau toprecision (). Acestea iau un argument care determină numărul de marcaje semnificative după virgulă, care trebuie incluse în rezultat:

  • dacă pentru TOFIXED () Argumentul nu este definit, valoarea implicită este 0, adică fără semne după virgulă; Valoarea maximă a argumentului este de 20;
  • dacă pentru Toprecision () argumentul nu este specificat, numărul nu se schimbă.

var randnum \u003d 6,25; randnum.tofixed (); \u003e "6" Math.pi.toprecizion (1); \u003e "3" var Randnum \u003d 87.335; Randnum.tofixed (2); \u003e "87.33" VAR Randnum \u003d 87.337; Randnum.toprecision (3); \u003e "87.3"

Notă

Și TOFIXED () și toprecision returnează o reprezentare inferioară rotunjită, și nu un număr. Aceasta înseamnă că adăugarea unui Randnum la Randnum va duce la un șir de concontine, și nu un număr:

consola.log (Randnum + rotunjit); \u003e "6.256"

Dacă aveți nevoie să obțineți o rotunjire JavaScript la sute, utilizați Parsefloat ():

var randnum \u003d 6,25; var rotunjit \u003d parsefloat (randnum.tofixed (1)); Consola.log (rotunjit); \u003e 6.3.

tOFIXED () și toprecision () sunt, de asemenea, metode utile pentru trunchierea unui număr mare de punct și virgulă. Este convenabil atunci când lucrați cu numere reprezentând unități monetare:

vAR THELNUM \u003d 1 VAR DOLLARSCENTS \u003d THELNUM.TOFIXED (2); Consola.log (dolarcență); \u003e "1.00"

Rețineți că, dacă există mai multe semne decât parametrul de precizie specificat, Toprecision va emite un rezultat într-un format științific:

var num \u003d 123.435 Num.toprecision (2); \u003e "1.2E + 2"

Cum să evitați greșelile la rotunjirea fracțiilor zecimale

În unele cazuri, se efectuează un tofximat și toprecision JavaScript rotunjire 5 până la o parte mai mică, nu mai mult:

var numeret \u003d 1,005; numtest.tofixed (2); \u003e 1;

Rezultatul exemplului de mai sus ar trebui să fie de 1,01 și nu 1. Dacă doriți să evitați această eroare, vă recomandăm să utilizați numerele exponențiale:

rundă de funcționare (numărul de retur (Math.round (valoare + e "+ zecimale) +" E - "+ zecimale);)

Aplicație:

rotund (1.005.2); \u003e 1.01.

Dacă aveți nevoie de o soluție și mai fiabilă decât rotunjirea, este disponibilă MDN..

Rotunjirea cu epsilon.

Metoda alternativă JavaScript rotunjind până la zeci a fost introdus în ES6 ( de asemenea, cunoscut sub numele de JavaScript 2015). « Machine Epsilon.»Oferă o limită de eroare rezonabilă atunci când comparăm două punct de vedere plutitor. Fără rotunjire, comparațiile pot da rezultate ca după cum urmează:

0,1 + 0.2 \u003d\u003d\u003d 0.3\u003e FALSE

Math.epsilon poate fi folosit în funcție pentru a obține o comparație corectă:

funcția Epsequ (X, Y) (return Math.Abs \u200b\u200b(x - y)< Number.EPSILON * Math.max(Math.abs(x), Math.abs(y)); }

Funcția are două argumente: Unul conține calcule, al doilea rezultat așteptat (rotunjit). Aceasta returnează o comparație a acestor doi parametri:

epseque (0,1 + 0.2, 0.3)\u003e Adevărat

Toate browserele moderne susțin funcțiile matematice ES6. Dar dacă trebuie să oferiți suport în browserele vechi, trebuie să utilizați polifilia.

Trunchierea numerelor zecimale

Toate metodele prezentate mai devreme efectuează JavaScript rotunjind până la zeci. Pentru a tăia un număr pozitiv de până la două locuri după virgulă, înmulțiți-l la 100, jgheab, iar apoi rezultatul obținut este împărțit la 100, aveți nevoie de:

funcția trunchiată (Număr) (return Math.TRunc (Num * 100) / 100;) trunchiat (3.1416)\u003e 3.14

Dacă este necesar ceva mai flexibil, puteți utiliza operatorul rupt:

funcția trunchiată (var numpowerconverter \u003d matematică (10, zecimalplaces); retur ~ ~ (Num * NumPowerConverter) / NumPowerConverter;)

Folosind:

vAR RANDINT \u003d 35.874993; Trunchiat (Randint, 3); \u003e 35.874.

Rotunjind la cel mai apropiat număr

A implementa Javascript rotunjit la ansamblu, Math.round () este utilizat:

Math.round (4.3)\u003e 4 Math.round (4.5)\u003e 5

Rețineți că " jumătate de valori", Cum ar fi .5, rotunjit.

Rotunjind până la cel mai apropiat număr întreg

Dacă doriți să vă rodeți într-o parte mai mică, utilizați metoda Math.Floor ():

Math.Floor (42.23); \u003e 42 Math.Floor (36,93); \u003e 36.

Rotunjirea "în jos" are o direcție pentru toate numerele, inclusiv pentru negativ. Acest lucru poate fi reprezentat ca un zgârie-nori cu un număr infinit de podele, inclusiv sub nivelul fundației ( reprezentând numere negative). Dacă vă aflați în lift între etajele de subsol 2 și 3 ( ce se potrivește cu valoarea -2.5), Math.Floor vă va elibera pe podea -3:

Matemath.floor (-2,5); \u003e -3.

Dacă doriți să evitați acest lucru, utilizați rotunjirea matematică JavaScript utilizând Math.Trunc () acceptate în toate browserele moderne (cu excepția IE / EDGE.):

Math.Trunc (-41,43); \u003e -41.

MDN oferă, de asemenea polyfill de trei linii pentru a furniza suport Math.Trunc în browserele vechi și IE / EDGE.

Rotunjind până la cel mai apropiat număr întreg

Dacă doriți să rotunjim numerele zecimale în sus, utilizați Math.ceil. Acțiunea acestei metode poate fi, de asemenea, reprezentată ca un lift nesfârșit: Math.ceil este întotdeauna norocos "sus", indiferent dacă numărul este negativ sau pozitiv:

Matemath.ceil (42.23); \u003e 43 Math.ceil (36,93); \u003e 37 Math.ceil (-36,93); -36.

Rotunjind la cel mai apropiat număr multiplu

Dacă aveți nevoie să rotunjim valoarea la cel mai apropiat număr, mai multe 5, creați o funcție care împarte numărul la 5, rozește-o și apoi multiplică rezultatul la aceeași valoare:

funcția rotundă 5 (Număr) (retur matemath.round (NUM / 5) * 5;)

Folosind:

rotunde5 (11); \u003e 10.

Dacă doriți să executați rotunjirea JavaScript până la două caractere, puteți transmite funcții ca număr inițial și multiplicitate:

funcția rotundă (Num, multiplu) (retur matemath.round (num / multiplu) * multiplu;)

Pentru a utiliza funcția, porniți numărul rotunjit și multiplicitatea în apelul său:

var inițialnumber \u003d 11; var mai multe \u003d 10; Rotundtomultiple (inițialnumber, multiplu); \u003e 10;

Pentru a roti valorile numai într-o direcție mare sau mai mică, înlocuiți funcția rotundă pe tail sau podea.

Legarea la intervalul

Uneori trebuie să obțineți valoarea x, care ar trebui să fie într-o anumită interval. De exemplu, aveți nevoie de o valoare de la 1 la 100, dar obținem valoarea 123. Pentru a remedia, puteți utiliza min () ( returnează cele mai mici numere) și max ( returnează numărul maxim admisibil).

Folosind:

var lowbound \u003d 1; var highbound \u003d 100; Var Numinput \u003d 123; VAR Clamped \u003d Math.Max \u200b\u200b(Lowbound, Math.min (NumInput, Highbound)); Consola.log (fixat); \u003e 100;

Puteți crea o funcție sau un număr de clasa de prelungire.

Foarte adesea calcule în JavaScript nu oferă rezultate la care vrem. Bineînțeles, putem face cu numerele - rotunjirea într-o parte mare sau mai mică, setați intervalele, tăiați numerele inutile la un anumit număr de zecimale, totul depinde de ceea ce doriți să faceți în viitor cu acest număr.

De ce aveți nevoie de rotunjire?

Unul dintre aspectele curioase ale JavaScript este că de fapt nu storează numere întregi, lucrăm imediat cu numere de puncte plutitoare. Acest lucru, în combinație cu faptul că multe valori fracționare nu pot fi exprimate prin numărul final de semne zecimale, putem obține astfel de rezultate în JavaScript:

0.1 * 0.2; > 0.020000000000000004 0.3 - 0.1 > 0.19999999999999998
Din scopuri practice, această inexactitate nu contează, în cazul nostru vorbim despre eroare în dolari Quintillion, cu toate acestea, cineva poate dezamăgi. Putem obține un rezultat ușor ciudat și când lucrați cu numere care sunt valori ale supapei, procentajul sau dimensiunile fișierelor. Pentru a corecta aceste inexactități, trebuie doar să reușim rezultatele, în timp ce este suficient să se stabilească o precizie zecimală.

Roundingul numerelor are o aplicație practică, putem manipula numărul într-o anumită interval, de exemplu, dorim să rotunjim valoarea celui mai apropiat număr întreg și să nu lucrăm numai cu partea zecimală.

Rotunjind numerele zecimale

Pentru a întrerupe numărul zecimal, utilizați metoda TOFIXED sau TOMPERECION. Ambele sunt luate printr-un singur argument care determină, respectiv, câte numere semnificative (adică numărul total de numere utilizate între numărul) sau după un punct și virgulă (cantitate după punctul zecimal) ar trebui să includă rezultatul:
  1. Dacă argumentul nu este definit pentru TOFIXED (), atunci în mod prestabilit va fi zero, ceea ce înseamnă 0 mărci după virgulă, argumentul are o valoare maximă egală cu 20.
  2. Dacă argumentul nu este specificat pentru toprecision, numărul rămâne neatins
Fie Randnum \u003d 6,25; randnum.tofixed (); \u003e "6" Math.pi.toprecizion (1); \u003e "3" Randnum \u003d 87,335; Randnum.tofixed (2); \u003e "87.33" Randnum \u003d 87.337; Randnum.toprecision (3); \u003e "87.3"
Ambele metode TOFIXED () și TOPRECISION () returnează o reprezentare a șirului rezultatului, nu un număr. Aceasta înseamnă că atunci când se însumează valoarea rotunjită cu Randnum, vor fi făcute rânduri și nu cantitatea de numere:

Fie Randnum \u003d 6,25; Lăsați rotunjite \u003d randnum.tofixed (); // "6" consola.log (Randnum + rotunjit); \u003e "6.256"
Dacă doriți ca rezultatul să aibă un tip de date numeric, va trebui să aplicați parsefloat:

Fie Randnum \u003d 6,25; Lăsați rotunjit \u003d parsefloat (randnum.tofixed (1)); Consola.log (rotunjit); \u003e 6.3.
Rețineți că 5 valori sunt rotunjite, cu excepția cazurilor rare.

TOFIXED () și TOPRECISION () Metodele sunt utile, deoarece acestea nu numai că acestea nu numai că a declanșat partea fracțională, ci și completarea semnelor după virgulă, care este convenabilă atunci când lucrează cu moneda:

Lăsați integral \u003d 1 lasa dolarscent \u003d integral.tofixat (2); Consola.log (dolarcență); \u003e "1.00"
Condiție Notă că toprecizarea va da rezultatul într-o înregistrare exponențială dacă numărul de numere întregi este mai mare decât acuratețea însăși:

Fie Num \u003d 123.435 Num.toprecision (2); \u003e "1.2E + 2"

Cum să evitați erorile de rotunjire cu numere zecimale

În unele cazuri, tofixed și toprecision rundă valoarea 5 până la o parte mai mică și într-un mare:

Fie NumTest \u003d 1,005; numtest.tofixed (2); \u003e "1.00"
Rezultatul calculului de mai sus a fost de a fi 1.01 și nu 1. Dacă doriți să evitați o eroare similară, putem folosi soluția propusă de Jack L Moore, care utilizează numerele exponențiale pentru a calcula:

Rundă de funcționare (numărul de retur (Math.round (valoare + e "+ zecimale) +" E - "+ zecimale);)
Acum:

Rotund (1.005.2); \u003e 1.01.
Dacă doriți o soluție mai fiabilă decât soluția afișată mai sus, puteți merge la MDN.

Masina Epsilon rotunjire

Metoda alternativă de rotunjire a numerelor zecimale a fost introdusă în ES6. Masina Epsilon Rounding oferă o limită de eroare rezonabilă atunci când compară două numere de puncte plutitoare. Fără rotunjire, comparațiile pot da rezultate ca după cum urmează:

0,1 + 0.2 \u003d\u003d\u003d 0.3\u003e FALSE
Folosim Math.epsilon în funcția noastră pentru a obține o comparație corectă:

Funcția Epsequ (X, Y) (return Math.Abs \u200b\u200b(x - y)< Number.EPSILON * Math.max(Math.abs(x), Math.abs(y)); }
Funcția are două argumente: primul calcul de curent, al doilea este rezultatul așteptat. Aceasta returnează o comparație a două:

Epseque (0,1 + 0.2, 0.3)\u003e Adevărat
Toate browserele moderne sprijină deja funcțiile matematice ES6, dar dacă doriți să obțineți suport în browsere, cum ar fi IE 11, utilizați Polyfills.

Reducerea părții fracționate

Toate metodele prezentate mai sus sunt capabile să se rotească până la numere zecimale. Pentru a reduce pur și simplu numărul de până la două semne după virgulă, trebuie să o înmulțiți mai întâi cu 100 și apoi rezultatul obținut este deja împărțit la 100:

Funcția trunchiată (Număr) (return Math.TRunc (Num * 100) / 100;) trunchiat (3.1416)\u003e 3.14
Dacă doriți să adaptați metoda pentru orice număr de punct și virgulă, puteți utiliza o negare dublă:

Funcția trunchiată (Fie NumPowerConverter \u003d Math.pow (10, zecimalplaces); retur ~ ~ (NumPowerConverter) / NumPowerConverter;)
Acum:

Fie Rantint \u003d 35.874993; Trunchiat (Randint, 3); \u003e 35.874.

Rotunjind la cel mai apropiat număr

Pentru a roti numarul zecimal la cel mai apropiat număr din mai mult sau într-o parte mai mică, în funcție de ceea ce suntem cei mai apropiați de, utilizați matemath.round ():

Math.round (4.3)\u003e 4 Math.round (4.5)\u003e 5
Rețineți că "jumătate din valoarea", 0,5 este rotunjită într-o direcție mare în conformitate cu regulile matematicii.

Rotunjind la un număr mai mic până la cel mai apropiat

Dacă doriți să vă rodeți întotdeauna la o parte mai mică, utilizați Math.Floor:

Math.Floor (42.23); \u003e 42 Math.Floor (36,93); \u003e 36.
Rețineți că rotunjirea într-o parte mai mică funcționează pentru toate numerele, inclusiv pentru negative. Imaginați-vă un zgârie-nori cu un număr infinit de podele, inclusiv pardoselile de nivel scăzut (reprezentând numere negative). Dacă sunteți în lift la nivelul inferior între 2 și 3 (care este o valoare -2,5), Math.Floor vă va elibera la -3:

Matemath.floor (-2,5); \u003e -3.
Dar dacă doriți să evitați o situație similară, utilizați Math.Trunc, susținută în toate browserele moderne (cu excepția IE / EDGE):

Math.Trunc (-41,43); \u003e -41.
Veți găsi Polyfill pe MDN pentru a furniza suport Math.Trunc în browsere și IE / EDGE.

Rotunjind la mai mult la cel mai apropiat număr întreg

Pe de altă parte, dacă aveți întotdeauna nevoie să vă rodeți până la cel mai mare, utilizați Math.ceil. Din nou, amintiți-vă liftul nesfârșit: Math.ceil va merge întotdeauna în sus, indiferent dacă numărul este negativ sau nu:

Matemath.ceil (42.23); \u003e 43 Math.ceil (36,93); \u003e 37 Math.ceil (-36,93); \u003e -36.

Rotunjind la un număr mai mare / mai mic

Dacă vrem să vă rotunjim până la cel mai apropiat număr, mai multe, cel mai simplu mod de a crea o funcție care împarte numărul pe 5 runde și apoi se multiplică la aceeași cantitate:

Funcția rotundă 5 (Număr) (retur matemath.round (NUM / 5) * 5;)
Acum:

Rotunde5 (11); \u003e 10.
Dacă doriți să vă rotunjim la mai multe valori, folosim o funcție mai generală prin trecerea valorii inițiale și multiple:

Funcția rotundă (Num, multiplu) (retur matemath.round (num / multiplu) * multiplu;)
Acum:

Lăsați inițialnumber \u003d 11; Lăsați mai multe \u003d 10; Rotundtomultiple (inițialnumber, multiplu); \u003e 10;

Fixarea numărului în interval

Există multe cazuri atunci când vrem să obținem valoarea lui X situată în intervalul. De exemplu, am putea avea nevoie de o valoare de la 1 la 100, dar, în același timp, am primit o valoare de 123. Pentru a remedia acest lucru, putem folosi minimul (returnează cel mai mic număr de numere) și maximul ( returnează cel mai mare număr de numere multiple). În exemplul nostru, intervalul de la 1 la 100:

Lăsați lowbound \u003d 1; Lăsați în jos \u003d 100; Lăsați Numinput \u003d 123; Fie Clamped \u003d Math.Max \u200b\u200b(Lowbound, Math.min (NumInput, Highbound)); Consola.log (fixat); \u003e 100;
Din nou, putem reutiliza operația și o înfășoară totul în funcție, folosim soluția propusă de Daniel X. Moore:

Număr.prototype.clamp \u003d funcția (min, max) (return Math.min (Math.max (acest, min), max););
Acum:

NumInput.clamp (Lowbound, Highbound); \u003e 100;

Gaussian rotund

Rotundul Gaussian, cunoscut și ca o rotunjire bancă, este că rotunjirea pentru acest caz apare la cel mai apropiat negru. Această metodă de rotunjire funcționează fără o eroare statistică. Cea mai bună soluție a fost propusă de Tim în jos:

Funcție Gaussround (Fie d \u003d Decimalplaces || 0, m \u003d matemath.pow (10, d), n \u003d + (d? Num * M: Num) \u003d N - I, E \u003d 1E-8, R \u003d (F\u003e 0,5 - E && F< 0.5 + e) ? ((i % 2 == 0) ? i: i + 1) : Math.round(n); return d ? r / m: r; }
Acum:

Gaussround (2.5)\u003e 2 Gausround (3.5)\u003e 4 Gausround (2.57, 1)\u003e 2.6
Semnul zecimal în CSS:

Deoarece JavaScript este adesea folosit pentru a crea o conversie de poziție a elementelor HTML, vă puteți întreba ce se întâmplă dacă generăm valori zecimale pentru articolele noastre:

#BOX (Lățime: 63.667731993px;)
Vestea bună este că browserele moderne vor lua în considerare valorile zecimale într-un model bloc, inclusiv în unități de măsurare procentuale sau pixelului.

Triere

Foarte des, trebuie să sortăm, de exemplu, orice element, avem o serie de înregistrări de jocuri, în timp ce acestea ar trebui organizate ca ordine descrescătoare a jucătorilor. Din păcate, metoda Standard Sort () are unele restricții uimitoare: funcționează bine cu cuvintele engleze frecvent utilizate, dar se rupe imediat la o întâlnire cu numere, caractere unice sau cuvinte în majuscule.

Sortați în ordine alfabetică

Se pare că sortarea în ordine alfabetică ar trebui să fie cea mai simplă sarcină:

Fie fructe \u003d ["Squash Butternut", "caise", "Cantaloupe"]; Fruit.Sort (); \u003e "Caise", "Butternut Squash", "Cantaloupe"]
Cu toate acestea, ne confruntăm cu problema de îndată ce unul dintre elemente este în majuscule:

Fie ca fructul \u003d ["Squash Butternut", "Aprot", "Cantalope"]; Fruit.Sort (); \u003e "Cantaloupe", "Aprot", "Butternut Squash"]
Acest lucru se datorează faptului că, în mod implicit, sorterul compară primul simbol prezentat în Unicode. Unicode este un cod unic pentru orice simbol, indiferent de platformă, indiferent de program, indiferent de limbă. De exemplu, dacă vă uitați prin tabelul de cod, caracterul "A" este U + 0061 (în sistemul hexazecimal 0x61), în timp ce simbolul "C" are cod U + 0043 (0x43), care se duce înainte în tabelul Unicode decât Simbolul "A".

Pentru a sorta o matrice care poate conține registre mixte ale primelor litere, trebuie să convertesc toate elementele pe temporar în registrul inferior, fie să determinăm comanda dvs. de sortare utilizând metoda Localecompare () cu unele argumente. De regulă, pentru un astfel de caz, este mai bine să creați imediat o funcție pentru utilizare repetată:

Funcția Alphasort (ARR) (returnarea A.LocaleCompare (B, EN ", (" sensibilitate ":" Baza "));))));) lăsați fructele \u003d [" Squash Butternut "," Caise "," Cantaloupe "]; Alphasort (fructe)\u003e
Dacă doriți să obțineți o matrice sortată în ordinea alfabetică inversă, schimbați pur și simplu pozițiile A și B la funcția:

Funcția Alphasort (ARR) (Return B.LocaleCompare (A, EN ", (" sensibilitate ":" Baza "));))));) Lăsați fructele \u003d [" Squash Butternut "," Caise "," Cantaloupe "]; Alphasort (Fructe)\u003e ["Cantaloupe", "Butternut Squash", "Caise"]
Este în valoare de acordarea atenției asupra faptului că se utilizează cu argumentele, este încă necesar să ne amintim că este susținut de IE11 +, pentru versiunile mai vechi, pe care le putem folosi fără argumente și în registrul inferior:

Funcția de cazare (ARR) (returnarea a.tolowowercase (). Localecompare (B.Tolowowcase ());)));) Lăsați fructele \u003d ["Butternut Squash", "caise", "Cantaloupe"]; Cazuri\u003e [caise, "Butternut Squash", "Cantaloupe"]

Sortare numerică

Toate acestea nu se aplică exemplului despre care am vorbit despre gama de înregistrări de mai sus. Cu unele matrice numerice, sortarea funcționează perfect, dar la un moment dat rezultatul poate fi imprevizibil:

Lăsați Showscores \u003d; highscores.sort (); \u003e
Faptul este că metoda Sortare () produce o comparație lexicografică: și acest lucru înseamnă că numerele vor fi convertite într-un șir, iar comparațiile vor fi efectuate din nou prin cartografierea primului caracter al acestui șir în simbolurile mesei Unicode. Prin urmare, trebuie să determinăm comanda dvs. de sortare:

Lăsați Showscores \u003d; Showscores.Sort (return A - B;)); \u003e
Din nou, pentru a sorta numerele în ordinea inversă, schimbați pozițiile A și B la funcție.

Sortați structura lui Json

Și în cele din urmă, dacă avem o structură de date asemănătoare JSON, reprezentată ca o serie de înregistrări de joc:

Lăsați scorurile \u003d [("numele": "Daniel", "Scorul": 21768), ("Nume": "Michael", "Scorul": 33579), ("Nume": "Alison", "Scor": 38395 );
În ES6 +, puteți utiliza funcțiile săgeată:

Scores.sort ((a, b) \u003d\u003e b.score - A.score));
Pentru browserele vechi care nu au un astfel de sprijin:

Scores.sort (return A.score - B.Score));
După cum puteți vedea, sortarea în JavaScript este un lucru destul de evident, sper că aceste exemple vor face ușurință pentru viață.

Lucrați cu funcții de alimentare

Exercițiul este o operație, definită inițial ca urmare a multiplicării multiple a unui număr natural pe sine, o rădăcină pătrată a numărului A este un număr dat unui pătrat. Cu aceste funcții, ne-am putea bucura în mod constant în viața de zi cu zi în lecțiile matematice, inclusiv la calcularea zonelor, volumelor sau chiar modelării fizice.

În JavaScript, o funcție de putere este reprezentată ca Math.Pow (), în noul standard ES7, un nou operator de exerciții a fost prezentat gradului - "* *".

Erend în grad

Pentru a construi un număr în gradul N-UY, utilizați funcția Math.pow (), unde primul argument este numărul care va fi ridicat într-o diplomă, al doilea argument este un indicator al gradului:

Math.pow (3.2)\u003e 9
O astfel de formă de înregistrare înseamnă 3 într-un pătrat sau 3 × 3, care are ca rezultat un rezultat 9. Un alt exemplu poate fi dat, desigur:

Math.pow (5.3); \u003e 125.
Care este, 5 în Cuba, sau 5 × 5 × 5, egal cu 125.

ECMASCRIPT 7 este următoarea versiune a JavaScript, în principiu, putem folosi noul operator de exerciții propuși într-un grad - * *, o astfel de formă de înregistrare poate fi mai vizuală:

3 ** 2 > 9
În prezent, sprijinul pentru acest operator este destul de limitat, deci nu este recomandat să îl utilizați.

Funcția puternică poate fi utilă în diferite situații. Un exemplu simplu, calculând numărul de secunde într-o oră: Math.Pow (60.2).

Pătrat și rădăcină cubică

Math.SQRT () și Math.cbrt () sunt opuse funcțiilor Math.pow (). După cum ne amintim, rădăcina pătrată a numărului A este un număr care dă un când pătratul este ridicat.

Math.SQRT (9)\u003e 3
În același timp, rădăcina cubică a numărului A este un număr care dă un când este ridicat cubul.

Math.cbrt (125)\u003e 5
Math.cbrt () a fost introdus în specificația JavaScript recent și, prin urmare, a fost susținută numai în browsere moderne: Chrome 38+, Firefox și Opera 25+ și Safari 7,1+. Veți observa că Internet Explorer lipsește în această listă, totuși veți găsi Polyfill pe MDN.

Exemple

Desigur, putem folosi și nu întregi într-una din aceste funcții:

Math.pow (1,25, 2); \u003e 1.5625 Math.cbrt (56.57)\u003e 3.8387991760286138
Rețineți că funcționează destul de bine atunci când utilizați valori negative ale argumentelor:

Math.Pow (-5.2)\u003e 25 Math.Pow (10, -2)\u003e 0,01
Cu toate acestea, pentru o rădăcină pătrată nu va funcționa:

Math.sqrt (-9)\u003e Nan
Din analiza matematică, știm că sub numărul imaginar înțeleg rădăcinile pătrate din numerele negative. Și acest lucru ne poate duce la o altă tehnică de a lucra cu numere complexe, dar aceasta este o altă poveste.

Puteți utiliza valori fracționate în Math.pow () pentru a găsi numere pătrate și cubice rădăcini. Rădăcina pătrată utilizează un indicator 0.5:

Math.pow (5, 0,5); // \u003d Math.SQRT (5) \u003d 5 ** (1/2)\u003e 2.23606797749979
Cu toate acestea, din cauza capriciilor plutitoare, nu vă puteți presupune cu precizie rezultatul corect:

Math.pow (2.23606797749979,2)\u003e 5.0000000000001
În astfel de situații, va trebui să recurgeți la semne de decupare în numere sau rotunjire la orice valoare.

Unii, din motive de neînțeles în JavaScript confunda Math.pow () Funcția cu Math.exp (), care este o funcție exponențială pentru numere ca întreg. Notă: În limba engleză, indicatorul "exponent" este tradus ca "exponent", așa că se referă mai degrabă la limbă engleză, deși există nume de indicatori alternativi, cum ar fi indexul, puterea.

Constantari matematice

Lucrul cu matematica în JavaScript este facilitat de un număr de constante încorporate. Aceste constante sunt proprietățile obiectului matematic. Este demn de remarcat faptul că constante sunt scrise în majuscule, și nu notația de călugii.

Math.Abs, ParseInt, Parsefloat

Lucrul cu numerele din JavaScript poate fi mult mai complicat decât pare. Valorile obținute nu se încadrează întotdeauna în intervalele așteptate, uneori rezultatul nu poate fi deloc ceea ce ne-am așteptat.

Mateth.abs ()

Meth.abs () Metoda returnează valoarea absolută a numărului, care ne amintește aceeași funcție matematică a numărului A.

Lăsați Newval \u003d -57,64; Math.abs (Newval); \u003e 57.64.
Math.abs (0) Întotdeauna returnează zero, dar dacă puneți un semn minus înainte de funcția -math.abs (NUM), vom fi întotdeauna o valoare negativă.

Math.Abs \u200b\u200b(0); \u003e -0.

parseign ()

Știm că JavaScript înțelege că "15" este un șir, și nu un număr și, de exemplu, la parsarea proprietăților CSS cu JavaScript cu orice valoare de la o matrice nepregătită, rezultatele noastre pot fi imprevizibile. Am putea ajunge la linia de intrare reprezentată ca "17px", iar pentru noi nu este rară. Întrebarea este cum să convertiți acest șir în valoarea reală și să o utilizați în alte calcule.

Sintaxă: parsint (șir, radix);

Funcția parsint convertește primul argument transmis într-un tip de șir, interpretează și returnează o valoare întregă sau nan. Rezultatul (dacă nu NAN) este un număr întreg și reprezintă primul argument (șir), care este considerat un număr în sistemul numeric specificat (Radix). De exemplu, baza 10 indică o conversie de la un număr zecimal, 8 - Octal, 16 hexazecimal și așa mai departe. Dacă baza este mai mare de 10, atunci literele sunt utilizate pentru a desemna numere mai mult de 9. De exemplu, pentru numerele hexazecimale (baza 16), literele de la A până la F.

Luați în considerare un exemplu de lucru cu proprietățile CSS, unde, convențional vorbind, putem obține o astfel de valoare:

Let Elem \u003d document. Let Centerpoint \u003d fereastră.GetComputestyle (Elem) .Transformorigin; \u003e "454px 2087.19px"
Putem împărți valorile în spații:

Centers \u003d Centerpoint.split (""); \u003e ["454px", "2087.19px"]
Cu toate acestea, fiecare element este încă un șir, putem scăpa de ea aplicând funcția noastră:

Fie CenterX \u003d ParseInt (centre, 10); \u003e 454 Fie Centery \u003d ParseInt (centre, 10); \u003e 2087.
După cum puteți vedea, specificăm numărul numărului la care numărul va fi convertit în care acest parametru este opțional, dar este recomandat să îl utilizați, în cazul în care nu știți ce linie va merge la intrare.

parsefloat ()

Din exemplul de mai sus, probabil că ați observat că ParseInt aruncă partea fracțională. În cazul nostru, Parsefloat poate lucra cu numere de puncte plutitoare. Din nou, poate fi util la parsarea CSS și alte sarcini, mai ales atunci când lucrați cu un punct plutitor în procente.

Sintaxă: parsefloat (șir)

Fie Fp \u003d "33,33333%"; Consola.log (parsefloat (FP)); \u003e 33.33333.
Rețineți că nu există al doilea argument în sintaxa parsefloat.

Înțelegem că ParseInt () și Parsefloat () sunt trăsături extrem de utile, este important să se țină seama de faptul că nu este necesar să se facă fără erori, deci este necesar să verificați gama de valori așteptate și să analizați în cele din urmă rezultatul pentru a vă asigura că valorile sunt corecte.
Trimiteți anonim