Bieži vien aprēķinu rezultāts ir skaitlis ar lielu skaitu zīmju aiz komata. Ja šo skaitli izmanto turpmākiem aprēķiniem, tad to var atstāt šajā formā. Bet dažreiz skaitlis ir jānoapaļo, piemēram, lai parādītu lapā. JavaScript noapaļo skaitļus, izmantojot vairākas metodes.
Metode Math.round() noapaļo vērtību līdz veselam skaitlim.
Math.round (skaitlis)
Skaitļi tiek noapaļoti saskaņā ar matemātikas likumiem. Tas ir, ja aiz komata ir skaitlis no 0 līdz 4, tad daļdaļa tiek vienkārši izmesta. Un, ja aiz komata ir skaitlis no 5 līdz 9, tad daļdaļa tiek izmesta, un viena tiek pievienota visai daļai. piemērs:
JavaScript:
Ir vēl divas metodes, kas noapaļo skaitli līdz veselam skaitlim. Metode Math.floor() noapaļo uz leju. Tas atmet skaitļa daļējo daļu. Un Math.ceil() metode noapaļo uz augšu. Tas atmet daļējo daļu un pievieno vienu visai daļai. Piemērs:
Protams, 5 - (-2) ir 5+2. Neaizmirstiet, ka šajā formulā jūs neiegūsit skaitli 5. Maksimālā summa būs 4,999999999. Iegūtās vērtības var noapaļot līdz vajadzīgajai precizitātei.
Ja nepieciešami tikai veseli skaitļi, iegūtās vērtības var noapaļot uz leju līdz tuvākajam veselajam skaitlim. Viens jāpieskaita līdz maksimumam, lai arī šis maksimums būtu iespējams. Formula izskatās šādi:
vesels skaitlis = Math.floor(min + Math.random() * (maks. + 1 - min)
Drukāsim skaitļus no 10 līdz 15:
20 |
ja (i=1; i= (lielāks vai vienāds ar), 3); //false console.log(5>=3); //tiesa Salīdzinot skaitļus ar daļēju daļu, ir jāņem vērā kļūdas, kas var rasties šo aprēķinu laikā. Piemēram, JavaScript skaitļu summa (0,2 + 0,4) nav vienāda ar 0,6: Console.log((0,2+0,4)==0,6); //nepatiess Kļūdas rodas tāpēc, ka visi aprēķini tiek veikti ar datoru vai citu elektroniskā ierīce ražo 2 skaitļu sistēmā. Tie. Pirms jebkuru darbību veikšanas datoram vispirms ir jāpārvērš izteiksmē uzrādītie skaitļi 2. skaitļu sistēmā. Bet ne katru daļskaitli aiz komata var precīzi attēlot 2. skaitļu sistēmā. Piemēram, skaitlis 0,25 10 collas binārā sistēma precīzi konvertēts. 0,125 × 2 = 0,25 | 0 0,25 × 2 = 0,5 | 0 0,5 × 2 = 1 | 1 0,125 10 = 0,001 2 Piemēram, skaitli 0,2 10 var pārvērst sistēmā 2 tikai ar noteiktu precizitāti: 0,2 × 2 = 0,4 | 0 0,4 × 2 = 0,8 | 0 0,8 × 2 = 1,6 | 1 0,6 × 2 = 1,2 | 1 0,2 × 2 = 0,4 | 0 0,4 × 2 = 0,8 | 0 0,8 × 2 = 1,6 | 1 0,6 × 2 = 1,2 | 1 0,2 × 2 = 0,4 | 0 0,4 × 2 = 0,8 | 0 0,8 × 2 = 1,6 | 1 0,6 × 2 = 1,2 | 1 ... 0,2 10 = 0,001100110011... 2 Rezultātā šīs kļūdas ietekmēs divu skaitļu summas aprēķinu un salīdzināšanas rezultātus. Tie. Izrādās, ka JavaScript faktiski redzēs šo ierakstu šādi: 0.6000000000000001==0.6 Aprēķinot vai attēlojot skaitļus ar daļdaļām, vienmēr ir jānorāda precizitāte, ar kādu vēlaties to izdarīt. Piemēram, salīdziniet skaitļus līdz 2 zīmēm aiz komata, izmantojot metodes toFixed() un toPrecision(): //metode toFixed() console.log((0.2+0.4).toFixed(2)==(0.6).toFixed(2)); //true //method toPrecision() console.log((0.2+0.4).toPrecision(2)==(0.6).toPrecision(2)); //tiesa Matemātikas pamatoperācijasJavaScript ir šādi matemātiskie operatori: + (saskaitīšana), - (atņemšana), * (reizināšana), / (dalīšana), % (modulo), ++ (palielināt vērtību par 1), -- (samazināt vērtību par 1). 6+3 //9 6-3 //3 6*3 //18 6/3 //2 6%3 //0, t.i. 6:3=2 => 6-3*2 => atpūta(0) 5%2 //1, t.i. 5:2=2(.5) => 5-2*2 => atpūta(1) 7,3%2 //1,3, t.i. 7.3:2=3(.65) => 7.3-2*3 => rest(1.3) //operācijas % rezultāta zīme ir vienāda ar pirmās vērtības zīmi -9%2.5 //-1.5 , t.i. 9:2,5=3(,6) => 9-2,5*3 => atpūta(1,5) -9%-2,5 //-1,5, t.i. 9:2.5=3(.6) => 9-2.5*3 => atpūta(1.5) -2%5 //-2, t.i. 2:5=0(.4) => 2-5*0 => atpūta(2) x = 3; konsole.log(x++); //izvada 3, tad iestata 4 console.log(x); //4 x = 3; konsole.log(++x); //iestata 4 un izvada x = 5; konsole.log(x--); //izvada 5, tad iestata 4 console.log(x); //4 x = 5; konsole.log(--x); //iestata 4 un izvada Turklāt JavaScript ir kombinēti operatori: x+=y (x=x+y), x-=y (x=x-y), x*=y (x=x*y), x/= y (x=x/y), x%=y (x=x%y). Ļoti bieži aprēķini JavaScript nesniedz tieši tādus rezultātus, kādus mēs vēlamies. Protams, ar cipariem varam darīt, ko vien vēlamies – noapaļot uz augšu vai uz leju, iestatīt diapazonus, nogriezt nevajadzīgos skaitļus līdz noteiktam cipariem aiz komata, tas viss ir atkarīgs no tā, ko ar šo ciparu vēlaties darīt turpmāk.0.1 * 0.2;
> 0.020000000000000004
0.3 - 0.1
> 0.19999999999999998
Viens no interesantajiem JavaScript aspektiem ir tas, ka tajā faktiski netiek saglabāti veseli skaitļi, mēs strādājam uzreiz ar peldošā komata skaitļiem. Tas, apvienojumā ar faktu, ka daudzas daļskaitļu vērtības nevar izteikt ar ierobežotu skaitu zīmju aiz komata, JavaScript mēs varam iegūt šādus rezultātus: Praktiskiem nolūkiem šai neprecizitātei nav nozīmes, mūsu gadījumā mēs runājam par kļūdu kvintiljonos daļās, tomēr tas dažus var pievilt. Mēs varam iegūt arī dīvainus rezultātus, strādājot ar skaitļiem, kas apzīmē valūtas, procentus vai failu izmērus. Lai šīs neprecizitātes labotu, mums vienkārši jāspēj noapaļot rezultātus, un pietiek ar decimāldaļas precizitātes iestatīšanu. Skaitļu noapaļošanai ir praktisks pielietojums, mēs varam manipulēt ar skaitli noteiktā diapazonā, piemēram, mēs vēlamies noapaļot vērtību līdz tuvākajam veselajam skaitlim, nevis strādāt tikai ar decimāldaļu. Decimālskaitļu noapaļošana Lai apgrieztu decimāldaļu, izmantojiet toFixed vai toPrecision metodi. Abi izmanto vienu argumentu, kas attiecīgi nosaka, cikJa parametram toPrecision netiek dots neviens arguments, skaitlis netiek aizskarts lai 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" Ļaujiet randNum = 6,25; let noapaļots = parseFloat(randNum.toFixed(1)); konsole.log(noapaļots); > 6.3 Metodes toFixed() un toPrecision() ir noderīgas, jo tās var ne tikai nogriezt daļdaļu, bet arī pievienot decimāldaļas, kas ir ērti, strādājot ar valūtu: Lai veselaisSipars = 1 lai dolāriCenti = veselsSkaits.toFixed(2); konsole.log(dolāriCenti); > "1.00" Ļaujiet num = 123,435 num.toPrecision(2); > "1.2e+2" Kā izvairīties no noapaļošanas kļūdām ar decimāldaļām Dažos gadījumos toFixed un toPrecision noapaļo vērtību 5 uz leju un uz augšu:Ļaujiet numTest = 1,005; numTest.toFixed(2); > "1.00" Funkcijas kārta(vērtība, decimālzīmes) (atgriež Skaitlis(Math.round(vērtība+"e"+decimālskaitļi)+"e-"+decimāldaļas); ) kārta(1,005,2); > 1.01 0,1 + 0,2 === 0,3 > nepatiess Funkcija epsEqu(x, y) ( atgriež Math.abs(x - y)< Number.EPSILON * Math.max(Math.abs(x), Math.abs(y));
}
EpsEqu(0,1 + 0,2, 0,3) > patiess Funkcija truncated(num) ( atgriešanās Math.trunc(num * 100) / 100; ) truncated(3,1416) > 3,14 Funkcija truncated(num, decimalPlaces) (lai numPowerConverter = Math.pow(10, decimalPlaces); atgriež ~~(num * numPowerConverter)/numPowerConverter; ) Ļaujiet randInt = 35,874993; saīsināts(randInt,3); > 35,874 Noapaļošana līdz tuvākajam skaitlim Lai noapaļotu decimālskaitli līdz tuvākajam skaitlim uz augšu vai uz leju atkarībā no tā, kuram mēs esam vistuvāk, izmantojiet Math.round():Math.round(4.3) > 4 Math.round(4.5) > 5 Matem.stāvs(42.23); > 42 Math.floor(36.93); > 36 Math.floor(-2,5); > -3 Math.trunc(-41,43); > -41 Math.griesti(42,23); > 43 Math.ceil(36,93); > 37 Math.ceil(-36,93); > -36 Noapaļošana uz augšu/uz leju līdz vajadzīgajam skaitlim Ja vēlamies noapaļot līdz tuvākajam reizinājumam 5, vienkāršākais veids ir izveidot funkciju, kas dala skaitli ar 5, noapaļo un pēc tam reizina ar tādu pašu summu:Funkcija roundTo5(num) ( atgriešanās Math.round(num/5)*5; ) RoundTo5(11); > 10 Funkcija roundToMultiple(num, multiple) (atgriezt Math.round(num/multiple)*multiple; ) Lai sākotnējais skaits = 11; ļaut vairākiem = 10; roundToMultiple(sākotnējaisCipars, vairākkārtējs); > 10; Skaitļa fiksēšana diapazonā Ir daudz gadījumu, kad mēs vēlamies iegūt x vērtību, kas atrodas diapazonā. Piemēram, mums var būt nepieciešama vērtība no 1 līdz 100, taču mēs saņēmām vērtību 123. Lai to labotu, mēs varam izmantot min (atgriež mazāko no skaitļu kopas) un max (atgriež lielāko no jebkuras kopas). no skaitļiem). Mūsu piemērā diapazons ir no 1 līdz 100:Ļaujiet zemākajai robežai = 1; let highBound = 100; lai numInput = 123; let clamped = Math.max(lowBound, Math.min(numInput, highBound)); console.log(clamped); > 100; Number.prototype.clamp = funkcija(min, max) ( return Math.min(Math.max(this, min), max); ); NumInput.clamp(lowBound, highBound); > 100; Gausa noapaļošana Gausa noapaļošana, kas pazīstama arī kā baņķiera noapaļošana, šajā gadījumā tiek noapaļota līdz tuvākajam pāra skaitlim. Šī noapaļošanas metode darbojas bez statistiskām kļūdām. Labākais risinājums ieteica Tims Dauns:Funkcija gaussRound(num, decimalPlaces) ( lai d = decimālvietas || 0, m = Math.pow(10, d), n = +(d ? cipars * m: num).toFixed(8), i = Math.floor (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;
}
GaussRound(2.5) > 2 gaussRound(3.5) > 4 gaussRound(2.57,1) > 2.6 Tā kā JavaScript bieži tiek izmantots, lai izveidotu pozicionālo kartējumu HTML elementiem, jums varētu rasties jautājums, kas notiktu, ja mēs saviem elementiem ģenerētu decimālvērtības: #box (platums: 63,667731993px;) Ļaujiet augļiem = ["sviesta ķirbis", "aprikoze", "kantalupa"]; fruit.sort(); > "aprikoze", "sviesta ķirbis", "kantalupa"] Ļaujiet augļiem = ["sviesta skvošs", "aprikoze", "Cantalope"]; fruit.sort(); > "Kantalopa", "aprikoze", "sviesta ķirbis"] Lai kārtotu masīvu, kurā var būt jaukti pirmie burti, mums ir vai nu īslaicīgi jāpārvērš visi elementi mazajos burtos, vai arī jādefinē kārtošanas secība, izmantojot metodi localeCompare() ar dažiem argumentiem. Parasti šādā gadījumā ir labāk nekavējoties izveidot funkciju atkārtotai lietošanai: Funkcija alphaSort(arr) ( arr.sort(funkcija (a, b) ( atgriež a.localeCompare(b, "en", ("jutīgums": "bāze")); )); ) let fruit = ["sviesta ķirbis ", "aprikoze", "Kantalopa"]; alfaSort(augļi) > Funkcija alphaSort(arr) ( arr.sort(funkcija (a, b) ( return b.localeCompare(a, "en", ("jutīgums": "bāze")); )); ) let fruit = ["sviesta ķirbis ", "aprikoze", "Kantalopa"]; alfaSort(augļi) > ["Kantalopa", "sviesta ķirbis", "aprikoze"] Funkcija caseSort(arr) ( arr.sort(funkcija (a, b) ( atgriež a.toLowerCase().localeCompare(b.to LowerCase()); )); ) let fruit = ["sviesta ķirbis", "aprikoze", "Kantalupa"]; caseSort(fruit) > ["aprikoze", "sviesta ķirbis", "kantalupa"] Skaitliskā šķirošana Tas viss neattiecas uz piemēru, par kuru mēs runājām iepriekš par spēļu ierakstu masīvu. Izmantojot dažus ciparu masīvus, šķirošana darbojas lieliski, taču kādā brīdī rezultāts var būt neparedzams:Ļaujiet augstākajiem rādītājiem = ; high Scores.sort(); > Ļaujiet augstākajiem rādītājiem = ; highScores.sort(funkcija(a,b) ( atgriež a - b; )); > Let scores = [ ( "vārds": "Daniels", "rezultāts": 21768 ), ( "vārds": "Maikls", "rezultāts": 33579 ), ( "vārds": "Alison", "rezultāts": 38395 ) ]; Scores.sort((a, b) => b.score - a.score)); Scores.sort(function(a, b) ( atgriež a.score - b.score )); JavaScript jaudas funkcija ir attēlota kā Math.pow(), jaunajā ES7 standartā tā tika ieviesta jauns operators kāpināšana - " * * ". Paaugstināšana līdz pakāpei Lai palielinātu skaitli līdz n-tajam pakāpim, izmantojiet funkciju Math.pow(), kur pirmais arguments ir skaitlis, kas tiks palielināts līdz pakāpei, bet otrais arguments ir eksponents:Math.pow(3,2) > 9 Math.pow(5,3); > 125 ECMAScript 7 ir nākamā JavaScript versija, principā mēs varam izmantot jauno ierosināto kāpināšanas operatoru - * *, šī apzīmējuma forma var būt aprakstošāka: 3 ** 2
> 9
Jaudas funkcija var būt noderīga dažādās situācijās. Vienkāršs piemērs, aprēķinot sekunžu skaitu stundā: Math.pow (60,2). Kvadrātsakne un kubsakne Math.sqrt() un Math.cbrt() ir pretstats Math.pow(). Kā mēs atceramies, kvadrātsakne no a ir skaitlis, kas dod kvadrātu.Math.sqrt(9) > 3 Math.cbrt(125) > 5 Math.pow(1,25, 2); > 1,5625 Math.cbrt(56,57) > 3,8387991760286138 Math.pow(-5,2) > 25 Math.pow(10,-2) > 0,01 Math.sqrt(-9) > NaN Varat izmantot daļskaitļus programmā Math.pow(), lai atrastu skaitļu kvadrātsaknes un kubsaknes. Kvadrātsakne izmanto eksponentu 0,5: Math.pow(5, 0,5); // = Math.sqrt(5) = 5 ** (1/2) > 2,23606797749979 Math.pow(2.23606797749979,2) > 5,000000000000001 Daži cilvēki nezināmu iemeslu dēļ JavaScript jauc funkciju Math.pow() ar Math.exp() , kas ir skaitļu eksponenciāla funkcija. Piezīme: iekšā angļu valoda"eksponents" tiek tulkots kā "eksponents", tāpēc tas, visticamāk, attieksies uz angliski runājošajiem, lai gan eksponentam ir arī alternatīvi nosaukumi, piemēram, indekss, jauda. Matemātiskās konstantes Darbu ar matemātiku JavaScript atvieglo vairākas iebūvētās konstantes. Šīs konstantes ir matemātikas objekta īpašības. Ir vērts atzīmēt, ka konstantes tiek rakstītas ar lielajiem burtiem, nevis CamelCase apzīmējumiem. Math.abs, parseInt, parseFloat Darbs ar skaitļiem JavaScript var būt daudz sarežģītāks, nekā šķiet. Iegūtās vērtības ne vienmēr iekļaujas paredzētajās robežās, dažreiz rezultāts var nebūt tāds, kādu mēs gaidījām. Math.abs() Metode Math.abs() atgriež skaitļa absolūto vērtību, kas mums atgādina līdzīgu matemātisko funkciju skaitļa modulim.Ļaujiet newVal = -57,64; Math.abs(newVal); > 57,64 Math.abs(0); > -0 parseInt() Mēs zinām, ka JavaScript saprot, ka “15” ir virkne, nevis skaitlis, un, piemēram, parsējot CSS rekvizītus, izmantojot JavaScript, vai saņemot jebkuru vērtību no nesagatavota masīva, mūsu rezultāti var būt neparedzami. Kā ievadi mēs varētu saņemt virkni, kas attēlota kā “17px”, un tas mums nav nekas neparasts. Jautājums ir par to, kā pārvērst šo virkni faktiskajā vērtībā un izmantot to turpmākajos aprēķinos.Sintakse: parseInt(string, radix); Funkcija parseInt pārvērš pirmo tai nodoto argumentu par virknes tipu, interpretē to un atgriež veselu skaitli vai NaN vērtību. Rezultāts (ja nav NaN) ir vesels skaitlis un ir pirmais arguments (virkne), kas tiek uzskatīts par skaitli norādītajā radiksā. Piemēram, 10. bāze norāda reklāmguvumu no decimālskaitlis, 8 - oktāls, 16 - heksadecimāls un tā tālāk. Ja bāze ir lielāka par 10, tad skaitļus, kas lielāki par 9, izmanto burti. Piemēram, priekš heksadecimālie skaitļi(16. bāze) tiek izmantoti burti A līdz F. Apskatīsim piemēru darbam ar CSS rekvizītiem, kur, nosacīti runājot, mēs varam iegūt šādu vērtību: Let elem = document.body; let centerPoint = window.getComputedStyle(elem).transformOrigin; > "454 pikseļi 2087,19 pikseļi" Ļaujiet centriem = centerPoint.split(" "); > ["454px", "2087,19px"] Lai centrsX = parseInt(centri, 10); > 454 let centerY = parseInt(centri, 10); >2087 Sintakse: parseFloat(virkne) Lai FP = "33,33333%"; konsole.log(parseFloat(FP)); > 33,33333 Lai gan mēs saprotam, ka parseInt() un parseFloat() ir ārkārtīgi noderīgas funkcijas, ir svarīgi paturēt prātā, ka tās nav bez kļūdām, tāpēc ir jāpārbauda paredzamo vērtību diapazons un galu galā jāanalizē rezultāts, lai nodrošinātu ka iegūtās vērtības ir pareizas. |