Гэр / Skype / Javascript дээр дугуйлах энгийн дүрмүүд. Бид аргуудыг судалж, практикт хэрэгжүүлдэг. Javascript - side - typescript дугуйлах Javascript-ийг 2 тэмдэгт болгон дугуйлах

Javascript дээр дугуйлах энгийн дүрмүүд. Бид аргуудыг судалж, практикт хэрэгжүүлдэг. Javascript - side - typescript дугуйлах Javascript-ийг 2 тэмдэгт болгон дугуйлах

Энэ нийтлэлд бид тоонууд, математикийн операторууд, тоог мөр болон эсрэгээр хөрвүүлэх арга замууд болон бусад олон чухал зүйлийг нарийвчлан авч үзэх болно.

Төгсгөлийн функц

isFinite функц нь аргумент нь хязгаарлагдмал тоо эсэхийг шалгах боломжийг танд олгоно.

Хариулт болгон өгөгдсөн функцХэрэв аргумент нь Infinity , -Infinity , NaN эсвэл эдгээр тусгай тоон утгуудын аль нэгэнд шилжвэл худал буцаана. Үгүй бол энэ функц үнэнийг буцаана.

IsFinite(73); // true isFinite(-1/0); // false isFinite(Infinity); // худал ньFinite(NaN); // false isFinite("Текст"); // худал

JavaScript нь isFinite глобал функцээс гадна Number.isFinite аргатай. Энэ нь isFinite-ээс ялгаатай нь аргументыг тоо болгон хөрвүүлэхийг албаддаггүй.

IsFinite("73"); // true Number.isFinite("73"); // худал

isNaN функц

isNaN функц нь аргумент нь тоо мөн үү эсвэл нэг рүү хөрвүүлэгдэх боломжтой эсэхийг тодорхойлоход зориулагдсан. Хэрэв тийм бол isNaN функц нь худал буцаана. Үгүй бол үнэнийг буцаана.

IsNaN(NaN); //үнэн isNaN("25px"); //үнэн, учир нь 20px бол NaN(25.5) тоо биш; //false isNaN("25.5"); //false isNaN(" "); // худал, учир нь зай эсвэл олон зайг 0 isNaN(null) болгон хувиргасан; // худал, учир нь null утгыг 0 болгон хувиргасан isNaN(үнэн); // худал, учир нь үнэн нь 1 isNaN(худал) болж хувирсан; // худал, учир нь худал утгыг 0 болгож хувиргана

Хэрэв энэ үйлдлийг төрөл хийлгүйгээр гүйцэтгэх шаардлагатай бол Number.isNaN аргыг ашиглана уу. Энэ аргыг ECMAScript 6-аас хойш хэлэнд нэвтрүүлсэн.

Хэрхэн мөрийг тоо руу шууд хөрвүүлэх вэ?

Та дараах аргуудыг ашиглан тоо руу стринг шууд дамжуулж болно.

1. Ашиглах нэгдмэл оператор +утгын өмнө тавигдах.

+"7.35"; // 7.35 +"текст"; // НаН

Энэ арга нь мөрийн эхэн ба төгсгөл дэх хоосон зай, мөн \n (мөрний тэжээл) зэргийг үл тоомсорлодог.

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

Ашиглаж байна энэ замаархоосон тэмдэгт мөр эсвэл зай ба \n-ээс бүрдсэн мөрийг 0 тоо руу хөрвүүлдэг болохыг анхаарна уу. Үүнээс гадна энэ нь null өгөгдлийн төрөл болон логикийг тоо болгон хувиргадаг.

null; //0 + үнэн; //1 +худал; //0 +" "; //0

2. parseInt функц. Энэ функц нь хөрвүүлэх зориулалттай бүхэл тоон аргумент. Хэрэглэхийн эсрэгээр нэгдмэл оператор +, энэ арга нь мөрийг тоо болгон хөрвүүлэх боломжийг олгодог бүх тэмдэгтүүд тоон шинж чанартай байдаггүй. Энэ нь эхний тэмдэгтээс эхлэн мөрийг хөрвүүлж эхэлдэг. Мөн тоон тэмдэгт биш тэмдэгттэй тулгармагц энэ функц нь ажлаа зогсоож, үүссэн тоог буцаана.

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

Энэ функцтэй ажиллах боломжтой өөр өөр системүүддугаарлалт (хоёртын, наймтын, аравтын, арван зургаатын тоот). Тооны системийн суурийн заалтыг 2 аргументын тусламжтайгаар гүйцэтгэнэ.

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

JavaScript нь parseInt функцээс гадна Number.parseInt аргатай. Энэ арга нь parseInt функцээс ялгаатай биш бөгөөд ECMASCRIPT 2015(6) тодорхойлолтоор JavaScript-д нэвтрүүлсэн.

3. parseFloat функц. parseFloat функц нь parseInt -тэй төстэй боловч аргументыг бутархай тоо руу хөрвүүлэх боломжийг олгодог.

ParseFloat("33.3%"); //33.3

Нэмж дурдахад parseFloat функц нь parseInt-ээс ялгаатай нь 2 аргументгүй тул мөрийг аравтын бутархайн тэмдэглэгээнд үргэлж тоо гэж үзэхийг оролддог.

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

JavaScript нь parseFloat функцээс гадна Number.parseFloat аргатай. Энэ арга нь parseFloat функцээс ялгаатай биш бөгөөд ECMASCRIPT 2015(6) тодорхойлолтоор JavaScript-д нэвтрүүлсэн.

Тоог мөр болгон хөрвүүлэх

Та toString аргыг ашиглан тоог мөр болгон хувиргаж болно.

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

toString арга нь мөн тооллын системийн суурийг зааж өгөх боломжийг олгодог бөгөөд энэ нь та дугаарыг мөрөнд шууд оруулах ёстой.

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

Хувьсагч нь тоо эсэхийг хэрхэн шалгах вэ

Дараах аргуудын аль нэгийг ашиглан хувьсагчийн утга нь тоо эсэхийг тодорхойлох боломжтой.

1. isNaN болон isFinite функцуудыг ашиглах:

// myVar бол хувьсагч (!isNaN(parseFloat(myVar)) && isFinite(parseFloat(myVar))) ( //myVar нь тоо эсвэл түүн рүү дамжуулж болно);

Функц байдлаар:

// функцийн функц нь Numeric(утга) (буцах !isNaN(parseFloat(утга)) && isFinite(parseFloat(утга)); ) // хэрэглээ var myVar = "12px"; console.log(isNumeric(myVar)); // үнэн

Энэ арга нь заасан утга нь тоо мөн үү эсвэл түүнд хөрвүүлэх боломжтой эсэхийг тодорхойлох боломжийг олгодог. Энэ хувилбарт хоосон тэмдэгт мөр, зайны мөр, null , Infinity , -Infinity , үнэн, худал зэргийг тоогоор тооцохгүй.

2. Ашиглах төрлийн операторболон функцууд isFinite, isNaN:

// утга нь тоо мөн эсэхийг шалгадаг функц isNumber(утга) (утгын төрлийг буцаана === "(!LANG: тоо)" && isFinite(value) && !isNaN(value); }; // использование функции isNumber isNumber(18); //true // использование функций для проверки текстовых значений isNumber(parseFloat("")); //false isNumber(parseFloat("Infinity")); //false isNumber(parseFloat("12px")); //true !}

Энэ функц нь заасан утга нь Number төрлийнх эсэх, мөн аль нэгэнд хамаарах эсэхийг тодорхойлно онцгой үнэт зүйлс Infinity, -Infinity болон NaN. Хэрэв тийм бол энэ функц үнэнийг буцаана.

3. ECMAScript 6 Number.isInteger(утга) аргыг ашиглах. Энэ арга нь заасан утга нь бүхэл тоо эсэхийг тодорхойлох боломжийг танд олгоно.

Number.isInteger("20"); // худал, учир нь энэ арга нь мөрийг Number.isInteger(20) тоо руу хөрвүүлдэггүй; //үнэн, учир нь өгөгдсөн үнэ цэнэтоо юм

Тэгш ба сондгой тоо

Та тоо тэгш эсвэл сондгой эсэхийг шалгаж болно дараах функцууд:

// Тоон тэгш эсэхийг шалгах функц isEven(n) функц ( буцах n % 2 == 0; ) // Тоон сондгой эсэхийг шалгах функц isOdd(n) ( Math.abs(n % 2) буцах) == 1;)

Гэхдээ ийм шалгалт хийхээс өмнө заасан утга нь тоо байгаа эсэхийг шалгах нь зүйтэй.

утга=20; хэрэв (Тоо.бүхэл тоо(утга)) ( хэрэв (тэгж(утга)) ( console.log("Тоо" + утга.toString() + " - тэгш"); ) )

Javascript дахь энгийн тоонууд

Javascript ашиглан 2-оос 100 хүртэлх анхны тоог харуулсан жишээг авч үзье.

// Тоог анхдагч эсэхийг шалгадаг функц ньPrime(утга) функц (if (isNaN(утга) || !isFinite(утга) || утга%1 || утга)< 2) return false; var max=Math.floor(Math.sqrt(value)); for (var i = 2; i< = max; i++) { if (value%i==0) { return false; } } return true; } // создать массив, который будет содержать простые числа от 2 до 100 var primaryNumber = ; for (var i = 2; i <= 100; i++) { if(isPrime(i)) primaryNumber.push(i); } // вывести в консоль простые числа от 2 до 100 console.log(primaryNumber);

Javascript дээр тоог дугуйлах

JavaScript дээр бутархай тоог бүхэл тоо болгон дугуйлах янз бүрийн арга байдаг.

1. Үүнд тусгайлан зориулсан Math.floor , Math.ceil болон Math.round аргуудыг ашиглана. Math.floor арга нь бутархай тоог хамгийн ойрын бүхэл тоо хүртэл дугуйруулна, өөрөөр хэлбэл. зүгээр л бутархай хэсгийг хаядаг. Math.ceil нь бутархай тоог хамгийн ойрын бүхэл тоо хүртэл дугуйруулна. Math.round нь бутархай хэсгийн утгаас хамааран тоог дээш эсвэл доош дугуйлна. Хэрвээ бутархай хэсэг 0.5-аас их буюу тэнцүү, дараа нь дээш, өөрөөр хэлбэл мушгиа доошилно.

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

2. toFixed(precision) аргыг ашиглах. Энэ арга нь тооны бутархай хэсгийг заасан нарийвчлал хүртэл дугуйруулна. Бөөрөнхийлсөн үр дүнг мөр болгон буцаана.

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

Хэрэв тоонуудын заасан нарийвчлалыг бүрдүүлэхийн тулд аравтын бутархай хангалттай биш бол түүнийг тэгээр дүүргэнэ.

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

3. toPrecision(precision) аргаар. Энэ арга нь заасан нарийвчлалтай тоог илэрхийлдэг. Үүний зэрэгцээ тэрээр зөвхөн бутархайг төдийгүй тооны бүх хэсгийг дугуйлж чаддаг. Үр дүнгийн тоог тогтмол цэг эсвэл экспоненциал хэлбэрээр авсан үр дүнгээс хамааран энэ аргаар илэрхийлж болно.

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

4. Логик NOT эсвэл OR операторуудыг ашиглах.

//давхар логик үгүйсгэх замаар console.log(~~7.9); //7 // логик OR-г тэгээр ашиглан: console.log(7.9^0); //7

Тооны бүхэл ба бутархай хэсэг

Та Math.floor() болон parseInt() аргуудыг ашиглан тооны бүхэл хэсгийг авах боломжтой.

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

Процент (%) операторыг ашиглан тооны бутархай хэсгийг авах боломжтой. Энэ оператор эхний тоог хоёр дахь тоонд хуваахад гарах үлдэгдлийг буцаана. Энэ тохиолдолд 1-ийг 2-р тоо болгон ашиглах ёстой.

Console.log(7.21%1); // 0.20999999999999996 // 2 аравтын орон хүртэл нарийвчлалтай console.log((7.21%1).toFixed(2)); // "0.21"

Нэмж дурдахад бутархай хэсгийг тооцооллыг ашиглан олж авч болно.

var number = 7.21; var fractionNumber = тоо - Math.floor(Math.abs(тоо)); console.log(бутархай тоо); // 0.20999999999999996

Тоо нь хуваагддаг уу

Процентийн операторыг ашиглан тоо тэнцүү хуваагдах эсэхийг тодорхойлох боломжтой.

тоо = 9; // хэрэв тоог 3-т хуваахад үлдэгдэл нь 0 байвал тийм, үгүй ​​бол үгүй ​​if (тоо%3==0) ( console.log (" + тоо + " нь 3-т хуваагддаг"); ) өөр ( консол. log("Тоо " + тоо + " 3-т хуваагдахгүй"); )

Тооны форматлах

JavaScript-д toLocaleString() арга нь хэлний (үйлдлийн системийн хэлний тохиргоо) дагуу тооны гаралтыг форматлах боломжийг олгодог.

Жишээлбэл, системд анхдагчаар суулгасан бүс нутгийн стандартын дагуу тоог форматлаж үзье.

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

Жишээлбэл, ОХУ-ын (ru) бүс нутгийн стандартын дагуу дугаарыг форматлаж үзье:

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

Мөн энэ аргыг дугаарыг мөнгөн тэмдэгт болгон форматлахад ашиглаж болно.

Console.log((2540.125).toLocaleString("ru-RU",(загвар:"валют", валют:"RUB"))); //"2,540.13 ₽" console.log((89.3).toLocaleString("ru-RU",(загвар:"валют", валют:"USD"))); //"$89.30" console.log((2301.99).toLocaleString("ru-RU",(загвар:"валют", валют:"EUR"))); //"€2,301.99"

Тоог хувиар илэрхийлэх:

Console.log((0.45).toLocaleString("ru-RU",(загвар:"хувь"))); //"45%"

Тоог тоонд хуваах (useGrouping шинж чанар):

Console.log((125452.32).toLocaleString("ru-RU",(Grouping ашиглах:үнэн))); //"125 452.32"

Аравтын бутархайн араас тодорхой тооны цифр (2) бүхий тоог хэвлэ.

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

Тооны харьцуулалт

JavaScript дахь тоог харьцуулахдаа дараах операторуудыг ашигладаг: == (тэнцүү), != (тэнцүү биш), > (их),< (меньше), >= (их буюу тэнцүү),<= (меньше или равно).

Жишээлбэл, хоёр тоог харьцуулж үзье:

Console.log(2>3); //false console.log(5>=3); // үнэн

Тоонуудыг бутархай хэсэгтэй харьцуулахдаа эдгээр тооцооллын явцад гарч болох алдааг харгалзан үзэх шаардлагатай.

Жишээлбэл, JavaScript-д тоонуудын нийлбэр (0.2 + 0.4) нь 0.6-тай тэнцэхгүй байна:

Console.log((0.2+0.4)==0.6); // худал

Бүх тооцоолол нь компьютер эсвэл бусад учраас алдаа гардаг электрон төхөөрөмж 2 тооны системд үйлдвэрлэдэг. Тэдгээр. Аливаа үйлдэл хийхээсээ өмнө компьютер эхлээд илэрхийлэлд үзүүлсэн тоонуудыг 2 тооллын систем рүү хөрвүүлэх ёстой. Гэхдээ 2-р тооллын системд ямар ч бутархай аравтын тоог яг илэрхийлэх боломжгүй.

Жишээлбэл, 0.25 10 тоо нь яг хоёртын тоонд хувирдаг.

0.125 × 2 = 0.25 | 0 0.25 × 2 = 0.5 | 0 0.5 × 2 = 1 | 1 0.125 10 = 0.001 2

Жишээлбэл, 0.2 10 тоог зөвхөн тодорхой нарийвчлалтайгаар 2 систем рүү хөрвүүлж болно.

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

Үүний үр дүнд эдгээр алдаа нь хоёр тооны нийлбэрийг тооцоолох, харьцуулах үр дүнд нөлөөлнө. Тэдгээр. Үнэндээ JavaScript энэ оруулгыг дараах байдлаар харах болно.

0.6000000000000001==0.6

Бутархай хэсэгтэй тоог тооцоолох эсвэл харуулахдаа үүнийг хийх нарийвчлалыг үргэлж зааж өгөх ёстой.

Жишээлбэл, toFixed() болон toPrecision() аргуудыг ашиглан 2 аравтын орон хүртэлх тоог харьцуулна уу:

//арга toFixed() console.log((0.2+0.4).toFixed(2)==(0.6).toFixed(2)); //үнэн //toPrecision() аргын консол.log((0.2+0.4).toPrecision(2)==(0.6).toPrecision(2)); // үнэн

Математикийн үндсэн үйлдлүүд

JavaScript нь дараах математикийн операторуудтай: + (нэмэх), - (хасах), * (үржүүлэх), / (хуваах), % (хуваалтын үлдэгдэл), ++ (утгыг 1-ээр нэмэгдүүлэх), -- (утгыг 1-ээр бууруулах) ).

6+3 //9 6-3 //3 6*3 //18 6/3 //2 6%3 //0, i.e. 6:3=2 => 6-3*2 => амралт(0) 5%2 //1, i.e. 5:2=2(.5) => 5-2*2 => амралт(1) 7.3%2 //1.3, i.e. 7.3:2=3(.65) => 7.3-2*3 => rest(1.3) //үйл ажиллагааны үр дүнгийн тэмдэг % нь эхний утгын тэмдэгтэй тэнцүү -9%2.5 //-1.5, i.e. 9:2.5=3(.6) => 9-2.5*3 => амрах(1.5) -9%-2.5 //-1.5, i.e. 9:2.5=3(.6) => 9-2.5*3 => амралт(1.5) -2%5 //-2, i.e. 2:5=0(.4) => 2-5*0 => амрах(2) x = 3; консолын бүртгэл (x++); //3-г харуулсны дараа y-г 4 болгож console.log(x); //4 x = 3; консолын бүртгэл (++ x); //4 багц ба гаралт x = 5; консолын бүртгэл (x--); //5 гаралт, y дараа нь 4 console.log(x); //4 x = 5; консолын бүртгэл(--x); //4-т тохируулж, гаралтууд Үүнээс гадна JavaScript-д хосолсон операторууд байдаг: x+=y (x=x+y), x-=y (x=x-y), x*=y (x=x*y), x/= y (x=x/y), x%=y (x=x%y). x=3; y=6; x+=y; консолын бүртгэл(x); //9 x = 3; y=6; x-=y; консолын бүртгэл(x); //-3 x = 3; y=6; x*=y; консолын бүртгэл(x); //18 x = 3; y=6; x/=y; консолын бүртгэл(x); //0.5 x = 3; y=6; x%=y; консолын бүртгэл(x); //3

Сайн уу. Өнөөдөр Javascript-ийн тухай баганад бид javascript дээр хөвөгч цэгийн аравтын бутархайн тоог хэрхэн тохируулах талаар авч үзэх болно. Жишээлбэл, гаралт хийхдээ аравтын бутархай 3, эсвэл хоёрыг л үлдээх хэрэгтэй.

Даалгавар: аравтын бутархайн JavaScript тоо

Тиймээс бид даалгавартай тулгараад байна: аравтын бутархайн өмнө болон аравтын бутархайн дараа тоонууд байх тооцооны үр дүн байна. Аравтын. Үр дүн нь ийм байна гэж бодъё 1538.9891200153. Гэхдээ та гаралт хийхдээ аравтын бутархайн өмнө мөнгөн дэвсгэртийн тоо, дараа нь копейк байгаа дүнг тусгасан тоог авах хэрэгтэй.

Энэ асуудлыг шийдэх хэд хэдэн арга бий.

Шийдэл 1: toFixed аргын аравтын бутархайн javascript тоо

toFixed нь ямар ч тоонд хэрэглэгдэх Javascript-д суурилагдсан арга бөгөөд энэ нь бөөрөнхийлэх нарийвчлалыг (өөрөөр хэлбэл аравтын бутархайн тоог) параметр болгон авдаг.

Варнум=1538.9891200153; num_str=num.toFixed(); //num_str=1538; num_str=num.toFixed(2); //num_str=1538.98; num_str=num.toFixed(5); //num_str=1538.98912;

Энэ функцийн нарийвчлалын параметр нь хамгийн багадаа 0 (сөрөг утгыг авдаггүй), хамгийн ихдээ 20 байх ёстой.

Та мөн адил хувьсагчгүйгээр хийж болно:

Num_str=(1538.9891200153).toFixed(2); //num_str=1538.98;

Шийдэл 2: toPrecision аргатай аравтын бутархайн JavaScript тоо

Энэ шийдэл нь ижил суулгац дээр суурилдаг javascript арга. Онцлог шинж чанарЭнэ аргын хувьд оролт болгон авсан параметр нь нарийвчлалыг (аравтын бутархайн тоо) биш харин нийт тэмдэгтүүдийн тоог (аравтын бутархайн өмнөх ба дараа) илэрхийлдэг.

Варнум=1538.9891200153; num_str=num.toPrecision(5); //num_str=1538.9; num_str=num.toPrecision(7); //num_str=1538.989;

Аравтын оронгүй шийдэл: аравтын бутархайн javascript тоо

Хэрэв аравтын бутархайг бүрэн хаях шаардлагатай бол, өөрөөр хэлбэл та бутархай тоог бүхэл тоо болгон дугуйлах шаардлагатай бол Математикийн ангийн функцийг ашиглаж болно: дугуй, тааз, шал.
Дугуй - дээш эсвэл доошоо (тооноос хамаарч) дугуйрна. Хэрэв аравтын бутархайн дараах утга хагасаас илүү байвал дээш, бага бол доошоо дугуйрна. Өөрөөр хэлбэл, 0.51 бол 1, 0.49 бол 0 болно.

Тааз - англи хэлнээс. тааз үргэлж дугуйрдаг.

Шал - англи хэлнээс. Хүйс үргэлж доошоо дугуйрдаг.

Варнум = 1538.9891200153; num_str=math.round(тоо); //num_str=1539; num_str=Math.floor(тоо); //num_str=1538; num_str=Math.ceil(тоо); //num_str=1539;

Тэгээд л болоо. Энэ тэмдэглэл таны асуудлыг шийдвэрлэхэд тусалсан гэж найдаж байна. Хэрэв ямар нэг зүйл болохгүй бол "Мэргэжилтэнээс асуулт асуух" ногоон товчлуур эсвэл сэтгэгдэл дээр асуулт асуугаарай.

Ихэнхдээ JavaScript дахь тооцоолол нь бидний хүссэн үр дүнг өгдөггүй. Мэдээжийн хэрэг, бид тоонуудын тусламжтайгаар юу ч хийж болно - дээш эсвэл доошоо дугуйлж, мужийг тохируулах, шаардлагагүй тоог аравтын орон болгон таслах, энэ бүхэн таны ирээдүйд энэ тоогоор юу хийхийг хүсч байгаагаас хамаарна.

Яагаад дугуйлах шаардлагатай вэ?

JavaScript-ийн нэг сонин тал нь үнэндээ бүхэл тоо хадгалдаггүй, бид шууд хөвөгч цэгтэй тоонуудтай ажиллаж байна. Энэ нь олон бутархай утгыг хязгаарлагдмал тооны аравтын бутархайгаар илэрхийлэх боломжгүйтэй хослуулан JavaScript дээр дараах үр дүнг авч болно.

0.1 * 0.2; > 0.020000000000000004 0.3 - 0.1 > 0.19999999999999998
Практикийн хувьд энэ алдаа нь хамаагүй, манай тохиолдолд квинтиллон хувьцааны алдааны тухай ярьж байна, гэхдээ энэ нь хэн нэгний урмыг хугалж магадгүй юм. Мөн бид валют, хувь эсвэл файлын хэмжээг илэрхийлсэн тоонуудтай ажиллахдаа хачирхалтай үр дүнд хүрч чадна. Эдгээр алдааг засахын тулд бид үр дүнг дугуйлж чаддаг байх хэрэгтэй бөгөөд аравтын бутархайн нарийвчлалыг тохируулахад хангалттай.

Тоонуудыг дугуйлах нь практик хэрэглээтэй тул бид тодорхой муж дахь тоог удирдах боломжтой, жишээлбэл, бид зөвхөн аравтын бутархайтай ажиллахын оронд утгыг хамгийн ойрын бүхэл тоо хүртэл дугуйлахыг хүсч байна.

Аравтын бутархайг дугуйлах

Аравтын тоог тайрахын тулд toFixed эсвэл toPrecision аргыг ашиглана уу. Аль аль нь нэг аргументыг авч, үр дүнд хэдэн чухал цифр (жишээлбэл, тоонд ашигласан нийт цифр) эсвэл аравтын бутархай (аравтын бутархайн дараах тоо) байх ёстойг тодорхойлдог.
  1. Хэрэв аргумент toFixed()-д тодорхойлогдоогүй бол энэ нь анхдагчаар тэг байх ба энэ нь аравтын бутархай 0, аргумент хамгийн ихдээ 20 утгатай байна.
  2. Хэрэв toPrecision-д аргумент өгөхгүй бол тоо нь хөндөгдөөгүй үлдэнэ
randNum = 6.25; randNum.toFixed(); > "6" Math.PI.toPrecision(1); > "3" randNum = 87.335; randNum.toFixed(2); > "87.33" рандНум = 87.337; randNum.toPrecision(3); > "87.3"
toFixed() болон toPrecision() аргууд хоёулаа тоо биш харин үр дүнгийн мөрийн дүрслэлийг буцаана. Энэ нь дугуйрсан утгыг randNum-ээр нийлбэрлэх үед тоонууд биш, мөрүүд хоорондоо холбогдоно гэсэн үг юм:

randNum = 6.25; let rounded = randNum.toFixed(); // "6" console.log(randNum + дугуйрсан); > "6.256"
Хэрэв та үр дүнг тоон өгөгдлийн төрөлтэй болгохыг хүсвэл parseFloat-г ашиглах хэрэгтэй:

randNum = 6.25; let rounded = parseFloat(randNum.toFixed(1)); консолын бүртгэл (дугуйрсан); > 6.3
Ховор тохиолдлоос бусад тохиолдолд 5 утгыг дугуйрсан болохыг анхаарна уу.

toFixed() болон toPrecision() аргууд нь ашигтай, учир нь тэдгээр нь зөвхөн бутархай хэсгийг таслахаас гадна аравтын орон зайг арилгадаг бөгөөд энэ нь валюттай ажиллахад тохиромжтой.

WholeNum = 1 let dollarsCents = wholeNum.toFixed(2); console.log(dollarscents); > "1.00"
Хэрэв бүхэл тоо нь нарийвчлалаас их байвал toPrecision үр дүнг экспоненциал тэмдэглэгээнд буцаана гэдгийг анхаарна уу:

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

Аравтын тоогоор бөөрөнхийлөх алдаанаас хэрхэн зайлсхийх вэ

Зарим тохиолдолд toFixed болон toPrecision нь 5-ын утгыг доош болон дээш дугуйруулна:

numTest = 1.005; numTest.toFixed(2); > "1.00"
Дээрх тооцооллын үр дүн 1 биш харин 1.01 байх ёстой. Хэрэв та ийм алдаа гаргахаас зайлсхийхийг хүсвэл бид тооцоололд экспоненциал тоо ашигладаг Жак Л Мурын санал болгосон шийдлийг ашиглаж болно.

Функцийн дугуй(утга, аравтын бутархай) ( Буцах Тоо(Math.round(утга+"e"+аравтын тоо)+"e-"+аравтын тоо); )
Одоо:

Дугуй(1.005,2); > 1.01
Хэрэв та дээр үзүүлсэнээс илүү бат бөх шийдлийг хүсч байвал MDN руу очиж болно.

Машины эпсилон дугуйлах

Аравтын бутархай тоог дугуйлах өөр аргыг ES6-д нэвтрүүлсэн. Машины эпсилон бөөрөнхийлөлт нь хоёр хөвөгч цэгийн тоог харьцуулахдаа боломжийн алдаа гаргадаг. Бөөрөнхийлөлгүйгээр харьцуулалт нь дараахтай төстэй үр дүнг гаргаж болно.

0.1 + 0.2 === 0.3 > худал
Бид зөв харьцуулалтыг хийхийн тулд Math.EPSILOON-г ашигладаг.

epsEqu(x, y) функц ( Math.abs(x - y) буцаана< Number.EPSILON * Math.max(Math.abs(x), Math.abs(y)); }
Функц нь хоёр аргументыг авдаг: эхнийх нь одоогийн тооцоо, хоёр дахь нь хүлээгдэж буй үр дүн юм. Энэ нь хоёрын харьцуулалтыг буцаана:

EpsEqu(0.1 + 0.2, 0.3) > үнэн
Орчин үеийн бүх хөтчүүд ES6 математикийн функцийг аль хэдийн дэмждэг боловч хэрэв та IE 11 гэх мэт хөтчүүдэд дэмжлэг үзүүлэхийг хүсвэл polyfills ашиглана уу.

Бутархай зүсэлт

Дээр дурдсан бүх аргууд нь аравтын тоо хүртэл дугуйлах боломжтой. Нэг тоог хоёр аравтын орон болгон таслахын тулд эхлээд 100-аар үржүүлж, үр дүнг 100-д ​​хуваах хэрэгтэй.

Таслагдсан функц (тоо) ( буцаах Math.trunc(num * 100) / 100; ) truncated(3.1416) > 3.14
Хэрэв та аравтын бутархайн тоонд тохирох аргыг тохируулахыг хүсвэл битийн давхар үгүйсгэлийг ашиглаж болно.

Функц таслагдсан(num, decimalPlaces) ( numPowerConverter = Math.pow(10, decimalPlaces); буцаана ~~(num * numPowerConverter)/numPowerConverter; )
Одоо:

randInt = 35.874993; таслагдсан(randInt,3); > 35.874

Хамгийн ойрын тоо хүртэл бөөрөнхийлөнө

Аравтын бутархай тоог хамгийн ойр байгаа тооноос хамааран дээш доош дугуйлахын тулд Math.round():

Math.round(4.3) > 4 Math.round(4.5) > 5
"Хагас утга", 0.5 нь математикийн дүрмээр дугуйрсан болохыг анхаарна уу.

Хамгийн ойрын бүхэл тоо хүртэл дугуйрна

Хэрэв та үргэлж доошоо дугуйлахыг хүсвэл Math.floor-г ашиглаарай:

Math.floor(42.23); > 42 Math.floor(36.93); > 36
Бөөрөнхийлөлт нь сөрөг тоонуудыг оруулаад бүх тоонд ажиллана гэдгийг анхаарна уу. Хязгааргүй олон давхрагатай тэнгэр баганадсан барилгыг төсөөлөөд үз дээ, доод түвшний давхрууд (сөрөг тоог илэрхийлдэг). Хэрэв та 2-оос 3-ын доод түвшний цахилгаан шатанд байгаа бол (энэ нь -2.5 утга) Math.floor таныг -3 руу аваачна:

Math.floor(-2.5); > -3
Хэрэв та ийм нөхцөл байдлаас зайлсхийхийг хүсч байвал орчин үеийн бүх хөтчүүдэд (IE/Edge-ээс бусад) дэмжигддэг Math.trunc ашиглана уу:

Math.trunc(-41.43); > -41
MDN дээр та хөтчүүд болон IE/Edge дээр Math.trunc-д дэмжлэг үзүүлэх polyfill-г олох болно.

Хамгийн ойрын бүхэл тоо хүртэл дугуйлах

Нөгөө талаас, хэрэв та үргэлж дугуйлах шаардлагатай бол Math.ceil-г ашиглаарай. Дахин хэлэхэд, хязгааргүй цахилгаан шатыг санаж байна: Math.ceil үргэлж "дээш" байх болно, тоо сөрөг эсвэл үгүй:

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

Шаардлагатай бол дээш/доошоо

Хэрэв бид 5-ын хамгийн ойрын үржвэр болгон дугуйлахыг хүсвэл хамгийн хялбар арга бол тоог 5-д хувааж, дугуйлж, дараа нь ижил хэмжээгээр үржүүлэх функцийг бий болгох явдал юм.

roundTo5(num) функц ( Math.round(num/5)*5; буцаана)
Одоо:

RoundTo5(11); > 10
Хэрэв та өөрийн утгыг үржвэр болгон дугуйлахыг хүсвэл бид илүү ерөнхий функцийг ашиглан анхны утга болон үржвэрийг оруулна:

roundToMultiple(тоо, олон) функц ( Math.round(num/multiple)*олон; буцаана)
Одоо:

Анхны дугаар = 11; олон = 10 байг; roundToMultiple(эхний дугаар, олон); > 10;

Муж дахь тоог засах

Бид муж доторх x утгыг авахыг хүсдэг олон тохиолдол байдаг. Жишээ нь, бид 1-ээс 100 хүртэлх утгыг хүсэж болох ч 123 гэсэн утгатай болсон. Үүнийг засахын тулд бид min (тоонуудын хамгийн багыг буцаана) болон max (ямар ч олонлогийн хамгийн томыг буцаана) ашиглаж болно. тоонуудын). Бидний жишээнд 1-ээс 100 хүртэлх хүрээ байна:

LowBound = 1 гэж үзье; highBound = 100 байг; numInput = 123; let clamped = Math.max(lowBound, Math.min(numInput, highBound)); консолын бүртгэл (хавчуулсан); > 100;
Дахин хэлэхэд бид Даниел X. Мурын санал болгосон шийдлийг ашиглан үйлдлийг дахин ашиглаж, бүгдийг нь функцэд багтааж болно:

Number.prototype.clamp = function(min, max) ( return Math.min(Math.max(энэ, мин), max); );
Одоо:

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

Гауссын дугуйлах

Гауссын дугуйлах буюу банкир дугуйлах нь энэ тохиолдлын хувьд тэгш тоогоор ойртуулах явдал юм. Энэ дугуйлах арга нь статистикийн алдаагүйгээр ажилладаг. Хамгийн сайн шийдэлҮүнийг Тим Даун санал болгосон:

Функц gaussRound(num, decimalPlaces) ( let d = decimalPlaces || 0, m = Math.pow(10, d), n = +(d ? num * 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
CSS дахь аравтын цэг:

JavaScript нь HTML элементүүдийн байрлалын хувиргалтыг бий болгоход ихэвчлэн ашиглагддаг тул хэрэв бид элементүүдийнхээ аравтын бутархай утгыг үүсгэвэл юу болох талаар та гайхаж магадгүй юм.

#хайрцаг (өргөн: 63.667731993px; )
Сайн мэдээ гэвэл орчин үеийн хөтчүүд хайрцагны загвар дахь аравтын бутархай утгыг, түүний дотор хувь эсвэл пикселийн нэгжийг хүндэтгэх болно.

Эрэмбэлэх

Ихэнхдээ бид зарим элементүүдийг эрэмбэлэх шаардлагатай байдаг, жишээлбэл, бид олон тооны тоглоомын бичлэгтэй байдаг бол тэдгээрийг тоглогчдын зэрэглэлээр буурах дарааллаар зохион байгуулах ёстой. Харамсалтай нь стандарт sort() арга нь гайхалтай хязгаарлалттай байдаг: энэ нь нийтлэг англи үгтэй сайн ажилладаг боловч тоо, өвөрмөц тэмдэгтүүд эсвэл том үсгээр бичигдсэн үгтэй тулгарах үед шууд задардаг.

Цагаан толгойн дарааллаар эрэмбэлэх

Массивыг цагаан толгойн дарааллаар эрэмбэлэх нь хамгийн энгийн ажил юм шиг санагдаж байна.

Let fruit = ["butternut squash", "appricot", "cantaloupe"]; жимсний сорт(); > "гүйлс", "цөцгийн хулуу", "канталуп"]
Гэсэн хэдий ч, элементүүдийн аль нэгийг нь том үсгээр бичсэн үед бид асуудалтай тулгардаг:

Let fruit = ["butternut squash", "appricot", "cantalope"]; жимсний сорт(); > "канталупа", "гүйлс", "цөцгийн хулуу"]
Учир нь анхдагчаар ангилагч нь Юникод дээр дүрслэгдсэн эхний тэмдэгтийг харьцуулдаг. Юникод бол платформ, программ, хэл харгалзахгүйгээр аливаа тэмдэгтийн өвөрмөц код юм. Жишээлбэл, кодын хүснэгтийг харахад "a" тэмдэгт нь U+0061 (16-тын тоо 0x61) утгатай байхад "C" тэмдэгт нь Юникод тэмдэгтийн өмнө ирдэг U+0043 (0x43) кодтой байна. хүснэгт. "a".

Холимог эхний үсэг агуулсан массивыг эрэмбэлэхийн тулд бид бүх элементүүдийг түр зуур жижиг үсэг рүү хөрвүүлэх эсвэл localeCompare() аргыг ашиглан зарим аргументуудыг ашиглан эрэмбэлэх дарааллаа тодорхойлох шаардлагатай. Дүрмээр бол ийм тохиолдолд олон удаа ашиглах функцийг нэн даруй үүсгэх нь дээр.

функц alphaSort(arr) ( arr.sort(функц (a, b) ( буцаах a.localeCompare(b, "en", ("мэдрэмж": "суурь")); )); ) let fruit = ["butternut squash" "," чангаанз "," Cantaloupe "]; alphaSort (жимс) >
Хэрэв та массивыг цагаан толгойн урвуу дарааллаар эрэмбэлэхийг хүсвэл функц дэх a ба b-ийн байрлалыг солиход л хангалттай.

функц alphaSort(arr) ( arr.sort(функц (a, b) ( буцах b.localeCompare(a, "en", ("мэдрэмж": "суурь")); )); ) let fruit = ["butternut squash" "," чангаанз "," Cantaloupe "]; alphaSort(жимс) > ["Cantaloupe", "butternut squash", "appricot"]
Энд тэмдэглэхэд, localeCompare нь аргументуудтай хамт ашиглагддаг, бид үүнийг IE11+ дэмждэг гэдгийг санах хэрэгтэй, IE-ийн хуучин хувилбаруудын хувьд бид үүнийг аргументгүйгээр ашиглаж болно, жижиг үсгээр:

Function caseSort(arr) ( arr.sort(function (a, b) ( return a.toLowerCase().localeCompare(b.toLowerCase()); )); ) let fruit = ["butternut squash", "apricot", "Cantaloupe"]; caseSort(жимс) > ["гүйлс", "цөцгийн хулуу", "канталуп"]

Тоон эрэмбэ

Энэ бүхэн нь тоглоомын бичлэгийн массивын талаар дээр дурдсан жишээнд хамаарахгүй. Зарим тоон массивын хувьд эрэмбэлэх нь маш сайн ажилладаг боловч зарим үед үр дүн нь урьдчилан таамаглах боломжгүй байж болно:

Өндөр оноо = гэж үзье; эрэмбэлэх(); >
Баримт нь sort() арга нь толь бичгийн харьцуулалтыг гүйцэтгэдэг: энэ нь тоонуудыг мөр болгон хувиргах бөгөөд энэ мөрийн эхний тэмдэгтийг Юникод хүснэгтийн тэмдэгтүүдийн дарааллаар тааруулж дахин харьцуулах болно гэсэн үг юм. Тиймээс бид эрэмбэлэх дарааллаа дахин тодорхойлох хэрэгтэй.

Өндөр оноо = гэж үзье; highScores.sort(функц(a,b) ( буцаах a - b; )); >
Дахин хэлэхэд, тоонуудыг эрэмбэлэх урвуу дараалал, функц дэх a ба b-ийн байрлалыг солино.

JSON шиг бүтцийг эрэмбэлэх

Эцэст нь хэлэхэд, хэрэв бид тоглоомын бичлэгийн массив хэлбэрээр дүрслэгдсэн JSON-тэй төстэй өгөгдлийн бүтэцтэй бол:

Оноо = [ ( "нэр": "Даниел", "оноо": 21768 ), ( "нэр": "Майкл", "оноо": 33579 ), ( "нэр": "Алисон", "оноо": 38395 )];
ES6+ дээр та сум функцийг ашиглаж болно:

Scores.sort((a, b) => b.score - a.score));
Энэ дэмжлэггүй хуучин хөтчүүдийн хувьд:

Scores.sort(функц(a, b) (а.оноо - b.оноо буцаана));
Таны харж байгаагаар JavaScript дээр эрэмбэлэх нь тодорхой бус зүйл бөгөөд эдгээр жишээнүүд амьдралыг ямар нэгэн байдлаар хөнгөвчлөх болно гэж найдаж байна.

Эрчим хүчний функцуудтай ажиллах

Экспоненциал гэдэг нь натурал тоог өөрөө үржүүлсний үр дүнд анх тодорхойлогдсон үйлдэл бөгөөд a-ийн квадрат язгуур нь квадрат болоход a өгдөг тоо юм. Бид эдгээр функцийг өдөр тутмын амьдралдаа математикийн хичээлд, тэр дундаа талбай, эзлэхүүнийг тооцоолох, тэр ч байтугай физик загварчлалд ашиглах боломжтой.

JavaScript-д тэжээлийн функцийг Math.pow() хэлбэрээр илэрхийлдэг бөгөөд шинэ ES7 стандартыг нэвтрүүлсэн. шинэ операторэкспонентаци - " * * ".

Экспоненциал

Тоог n-р зэрэглэлд хүргэхийн тулд Math.pow() функцийг ашиглана уу, эхний аргумент нь зэрэглэл рүү өсгөх тоо, хоёр дахь аргумент нь экспонент болно:

Math.pow(3,2) > 9
Энэ тэмдэглэгээ нь 3 квадрат буюу 3 × 3 гэсэн үг бөгөөд үр дүнд нь 9 байна. Өөр нэг жишээг мэдээж өгч болно:

Math.pow(5,3); > 125
Өөрөөр хэлбэл, 5 куб буюу 5 × 5 × 5 нь 125-тай тэнцэнэ.

ECMAScript 7 нь JavaScript-ийн дараагийн хувилбар бөгөөд зарчмын хувьд бид шинэ санал болгож буй экспонентацийн операторыг ашиглаж болно - * *, энэ бичих хэлбэр нь илүү тайлбарлах боломжтой:

3 ** 2 > 9
Дээр Энэ мөчЭнэ операторын дэмжлэг харьцангуй хязгаарлагдмал тул ашиглахыг зөвлөдөггүй.

Эрчим хүчний функц нь янз бүрийн нөхцөл байдалд ашигтай байж болно. Нэг цагийн секундын тоог тооцоолох энгийн жишээ: Math.pow(60,2).

Дөрвөлжин ба шоо үндэс

Math.sqrt() болон Math.cbrt() нь Math.pow()-ийн эсрэг юм. Бидний санаж байгаагаар a-ийн квадрат язгуур нь квадрат үед a өгдөг тоо юм.

Math.sqrt(9) > 3
Үүний зэрэгцээ, a-ийн шоо язгуур нь шоо болгох үед a өгдөг тоо юм.

Math.cbrt(125) > 5
Math.cbrt() нь саяхан JavaScript-ийн техникийн үзүүлэлтэд нэвтэрсэн тул зөвхөн Chrome 38+, Firefox болон Opera 25+, Safari 7.1+ орчин үеийн хөтчүүдэд дэмжигддэг. Та үүнийг анзаарах болно Internet ExplorerЭнэ жагсаалтад байхгүй, гэхдээ та MDN дээрээс polyfill олж болно.

Жишээ

Мэдээжийн хэрэг, бид эдгээр функцүүдийн аль нэгэнд бүхэл бус утгыг ашиглаж болно:

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
Математикийн шинжилгээнээс харахад төсөөллийн тоог сөрөг тоонуудын квадрат язгуур гэж ойлгодог. Энэ нь биднийг өөр нарийн төвөгтэй тооны техник рүү хөтөлж магадгүй, гэхдээ энэ бол өөр түүх юм.

Та тоонуудын квадрат ба шоо язгуурыг олохын тулд Math.pow() дээр бутархай утгыг ашиглаж болно. Квадрат язгуур нь 0.5-ын илтгэгчийг ашигладаг:

Math.pow(5, 0.5); // = Math.sqrt(5) = 5 ** (1/2) > 2.23606797749979
Гэсэн хэдий ч хөвөгч цэгийн гажуудлаас болж та зөв үр дүнг тааж чадахгүй.

Math.pow(2.23606797749979.2) > 5.000000000000001
Ийм нөхцөлд та тэмдгүүдийг тооноос нь хасах эсвэл ямар нэг утга руу дугуйлах хэрэгтэй болно.

Зарим нь JavaScript-д ойлгомжгүй байдлаар Math.pow() функцийг ерөнхийд нь тоонуудын экспоненциал функц болох Math.exp()-тай андуурдаг. Тайлбар: англи хэл дээр "exponent" нь "exponent" гэж орчуулагддаг тул энэ нь англи хэлээр ярьдаг хүмүүст илүү хамааралтай боловч индекс, хүч гэх мэт илтгэгчийн өөр нэр байдаг.

Математикийн тогтмолууд

JavaScript дээр математиктай ажиллах нь хэд хэдэн суулгасан тогтмолуудын ачаар хялбар болсон. Эдгээр тогтмолууд нь Math объектын шинж чанарууд юм. Тогтмолуудыг CamelCase тэмдэглэгээ биш харин том үсгээр бичдэг гэдгийг тэмдэглэх нь зүйтэй.

Math.abs, parseInt, parseFloat

JavaScript дээр тоонуудтай ажиллах нь таны бодож байгаагаас хамаагүй илүү төвөгтэй байж болно. Хүлээн авсан утгууд нь хүлээгдэж буй хязгаарт үргэлж ордоггүй, заримдаа үр дүн нь бидний хүлээж байсан зүйл биш байж магадгүй юм.

Math.abs()

Math.abs() арга нь тооны үнэмлэхүй утгыг буцаадаг бөгөөд энэ нь бидэнд ижил төстэй математикийн модуль функцийг сануулдаг.

newVal = -57.64; Math.abs(newVal); > 57.64
Math.abs(0) нь үргэлж тэгийг буцаадаг боловч -Math.abs(NUM) функцын өмнө хасах тэмдэг тавивал бид үргэлж сөрөг утгатай байх болно.

Math.abs(0); > -0

parseInt()

JavaScript нь "15" нь тоо биш харин тэмдэгт мөр гэдгийг ойлгодог гэдгийг бид мэднэ, жишээлбэл, JavaScript ашиглан CSS шинж чанаруудыг задлан шинжлэх эсвэл бэлтгэгдээгүй массиваас тодорхой утгыг авах үед бидний үр дүн урьдчилан таамаглах аргагүй болж хувирдаг. Бид "17px" гэсэн тэмдэгт мөрийг оролт болгон авч болох бөгөөд энэ нь бидний хувьд тийм ч ховор биш юм. Асуулт бол энэ мөрийг хэрхэн бодит утга руу хөрвүүлэх, цаашдын тооцоололд ашиглах явдал юм.

Синтакс: parseInt(мөр, радикс);

parseInt функц нь түүнд дамжуулсан эхний аргументыг мөрийн төрөл болгон хувиргаж, тайлбарлаж, бүхэл тоо эсвэл NaN утгыг буцаана. Үр дүн (хэрэв NaN биш бол) нь бүхэл тоо бөгөөд заасан тооны системд (радикс) тоо гэж тооцогдох эхний аргумент (мөр) юм. Жишээлбэл, 10-ын суурь нь аравтын тооноос, 8-ыг аравтын тооноос, 16-ыг арван зургаат тооноос гэх мэтээр хөрвүүлэхийг заадаг. Хэрэв суурь нь 10-аас их бол 9-өөс их тоог тэмдэглэхийн тулд үсэг ашиглана. Жишээлбэл, арван зургаатын тоо (суурь 16) нь A-аас F үсгийг ашигладаг.

CSS шинж чанаруудтай ажиллах жишээг авч үзье, харьцангуйгаар бид дараах утгыг авч болно.

Let elem = document.body; let centerPoint = window.getComputedStyle(elem).transformOrigin; > "454px 2087.19px"
Бид утгуудыг зайгаар ялгаж болно:

Centers = centerPoint.split(" "); > ["454px", "2087.19px"]
Гэсэн хэдий ч элемент бүр нь мөр хэвээр байгаа тул бид функцээ ашиглан үүнээс ангижрах боломжтой.

centerX = parseInt (төв, 10); > 454 let centerY = parseInt(төв, 10); > 2087
Таны харж байгаагаар, хоёр дахь аргумент болгон бид дугаарыг хөрвүүлэх тооллын системийг зааж өгсөн бөгөөд энэ параметр нь сонголттой боловч хэрэв та ямар мөр оруулахаа мэдэхгүй байгаа бол үүнийг ашиглахыг зөвлөж байна.

parseFloat()

Дээрх жишээнээс та parseInt нь бутархай хэсгийг устгаж байгааг анзаарсан байх. Манай тохиолдолд parseFloat нь хөвөгч цэгтэй тоонуудтай ажиллах боломжтой. Дахин хэлэхэд, энэ нь CSS задлан шинжлэх болон бусад ажлуудад, ялангуяа хөвөгч цэгийн хувьтай ажиллахад хэрэг болно.

Синтакс: parseFloat(string)

LetFP = "33.33333%"; console.log(parseFloat(FP)); > 33.33333
parseFloat синтакс дээр хоёр дахь аргумент байхгүй гэдгийг анхаарна уу.

parseInt() болон parseFloat() нь туйлын чухал гэдгийг бид ойлгож байна ашигтай шинж чанарууд, алдаа гарах нь гарцаагүй гэдгийг санах нь чухал тул та хүлээгдэж буй утгуудын хүрээг шалгаж, үр дүнд нь дүн шинжилгээ хийх хэрэгтэй.
Нэргүй илгээнэ үү



JavaScript математикийн хоёр аравтын орон хүртэл дугуйлах (9)

Надад дараах JavaScript синтакс байна:

Vardiscount = Math.round(100 - (үнэ / жагсаалтын үнэ) * 100);

Энэ нь бүхэл тоо хүртэл дугуйлна. Хоёр аравтын оронтой үр дүнг яаж буцаах вэ?

Ажлын жишээ энд байна

хэлбэлзэл=200.2365455; үр дүн=Math.round(утга*100)/100 //үр дүн нь 200.24 болно.

Дурын тооны аравтын орон хүртэл дугуйлахын тулд 2 мөр код бүхий функц ихэнх хэрэгцээнд хангалттай. Тоглоомын жишээ код энд байна.

var testNum = 134.9567654; var decPL = 2; var testRes = roundDec(testNum,decPl); анхааруулга (testNum + "" + decPl + "аравтын орон нь" + testRes хүртэл дугуйрсан); функц roundDec(nbr,dec_places)( var mult = Math.pow(10,dec_places); буцаана Math.round(nbr * mult) / олон; )

Миний олсон хамгийн сайн бөгөөд хялбар шийдэл бол

Функц round(утга, аравтын бутархай) ( буцах Тоо(Math.round(утга+"e"+аравтын тоо)+"e-"+аравтын тоо); ) round(1.005, 2); // 1.01

Хүлээн зөвшөөрөгдсөн хариултын бага зэрэг өөрчлөлт. toFixed(2) нь мөрийг буцаадаг бөгөөд та үргэлж хоёр аравтын орон авах болно. Энэ нь тэг байж болно. Хэрэв та хоцрогдсон null(s)-ыг дарахыг хүсвэл дараахыг хийнэ үү:

Var хөнгөлөлт = + ((үнэ / жагсаалтын үнэ). Тогтсон(2));

Засварласан: Би дөнгөж сая Firefox 35.0.1-д ямар алдаа байгааг олж мэдсэн бөгөөд дээрх зүйл нь NaN-д зарим утгыг өгч магадгүй гэсэн үг юм.
Би кодоо өөрчилсөн

Vardiscount = Math.round(үнэ / жагсаалтын үнэ * 100) / 100;

Энэ нь аравтын бутархай хоёрын нарийвчлалтай тоог өгдөг. Гурав хэрэгтэй бол 1000-аар үржүүлж хуваах гэх мэт.
OP үргэлж хоёр аравтын оронтой байхыг хүсдэг ч Firefox-д toFixed() эвдэрсэн бол эхлээд үүнийг засах хэрэгтэй.
https://bugzilla.mozilla.org/show_bug.cgi?id=1134388-г үзнэ үү

2 аравтын оронтой үр дүнг авахын тулд та дараахь зүйлийг хийж болно.

Vardiscount = Math.round((100 - (үнэ / жагсаалтын үнэ) * 100) * 100) / 100;

Бөөрөнхийлсөн утгыг эхний хоёр цифрийг хадгалахын тулд 100-аар үржүүлээд дараа нь бодит үр дүнг авахын тулд 100-д ​​хуваана.

би бодохдоо Хамгийн зөв замМиний харсан оронтой тоогоор 10-аар үржүүлээд, дараа нь Math.round хийж, эцэст нь 10-ыг цифрийн тоогоор хуваана. Энд энгийн функц, би үүнийг бичгийн хэлбэрээр ашигладаг:

roundToXDigits функц(утга: тоо, цифр: тоо) ( утга = утга * Math.pow(10, цифр); утга = Math.round(утга); утга = утга / Math.pow(10, цифр); буцах утга; )

Эсвэл энгийн JavaScript:

Функц roundToXDigits(утга, цифр) ( if(!digits)( цифр = 2; ) утга = утга * Math.pow(10, цифр); утга = Math.round(утга); утга = утга / Math.pow(10) , цифр); буцах утга; )

ЖИЧ. - 3 оронтой нарийвчлал чухал бол Засах 4 хэсгийг үзнэ үү.

Vardiscount = (үнэ / жагсаалтын үнэ).toFixed(2);

Аравтын бутархайн 2-оос дээш оронтой тооноос хамааран дээш эсвэл доош дугуйлах боломжтой.

Өөрчлөх.Бусад хүмүүсийн дурьдсанчлан энэ нь үр дүнг мөр болгон хувиргах болно. Үүнээс зайлсхийхийн тулд:

Vardiscount = +((үнэ / жагсаалтын үнэ). Тогтсон(2));

Засвар 2- Тайлбарт дурьдсанчлан энэ функц тодорхой нарийвчлалтайгаар ажилладаггүй, жишээлбэл 1.005 тохиолдолд 1.01-ийн оронд 1.00-ыг буцаана. Хэрэв нарийвчлал тийм чухал бол би энэ хариултыг олсон: https://.com/a/32605063/1726511 Энэ нь миний туршиж үзсэн бүх тестүүдэд сайн ажиллаж байгаа бололтой.

Нэг жижиг өөрчлөлт хийх шаардлагатай боловч дээрх хариултын функц нь нэг рүү дугуйлах үед бүхэл тоог буцаадаг тул жишээлбэл 99.004 нь 99.00 биш харин 99-ийг буцаана, энэ нь үнийг харуулахад тохиромжгүй.

Засвар 3- Бодит STILL буцаалт дээр Fixed зарим тоонуудыг алдагдуулж байсан юм шиг санагдаж байна, энэ эцсийн засвар ажиллах шиг байна. Маш олон нөхөн төлбөр авч байна!

Vardiscount = roundTo((үнэ / жагсаалтын үнэ), 2); функц roundTo(n, цифр) ( if (цифр === тодорхойгүй) ( цифр = 0; ) var үржүүлэгч = Math.pow(10, цифр); n = parseFloat((n * үржүүлэгч).toFixed(11)); var test =(Math.round(n) / үржүүлэгч); буцах +(test.toFixed(цифр)); )

Засвар 4-Та нар намайг алж байна. Бөөрөнхийлөлт хийхээсээ өмнө сөрөг тоог эерэг болгоод дараа нь үр дүнг буцаахаасаа өмнө буцааж хаях нь яагаад илүү хялбар байдгийг судалгүйгээр 3-ыг засварлах нь сөрөг тоон дээр бүтэлгүйтдэг.

roundTo(n, digits) ( var сөрөг = худал; if (цифр === тодорхойгүй) ( цифр = 0; ) if(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; }

Хамгийн хурдан арга- toFixed()-ээс хурдан:

ХОЁР DECALYLS

x = .123456 үр дүн = Math.round(x * 100) / 100 // үр дүн .12

ГУРВАН АРАВУУД

x = .123456 үр дүн = Math.round(x * 1000) / 1000 // үр дүн .123

Функцийн тойрог(тоо,дав) ( тоо = Math.round(num+"e"+dec) буцах Тоо(num+"e-"+dec) ) //Таны сонгосон аравтын бутархай хүртэл дугуйлах: дугуй (1.3453,2)

Сайн байна уу JavaScript хайрлагчид. Энэ хэл нь маш ер бусын бөгөөд хэсэг бүрт өөрийн гэсэн онцлог, ер бусын хэллэгээрээ ялгардаг гэдгийг та аль хэдийн анзаарсан байх. техникийн шийдлүүд. Тиймээс өнөөдрийн нийтлэл нь "JavaScript-ийг дугуйлах" сэдэвт зориулагдсан болно.

Одоогийн нийтлэлийг уншсаны дараа та тоонуудыг яагаад дугуйлах шаардлагатай байгаа, js-д ямар арга, шинж чанарууд нь энэ үүргийг гүйцэтгэдэг, мөн 0-д хуваах нь юугаараа ялгаатай болохыг олж мэдэх болно. Би зарчмуудыг өөрчлөхгүйгээр жишээнүүдийг хавсаргах болно. материал, үйлдэл бүрийг нарийвчлан тайлбарлана. Одоо сурч эхэлцгээе!

Тоонуудын талаархи чухал тэмдэглэлүүд

Нэгдүгээрт, js-д бүх төрлийн тоо (бутархай ба бүхэл тоо) төрөлтэй гэдгийг санаарай тоо. Нэмж дурдахад тэдгээр нь IEEE-754 стандарт гэж нэрлэгддэг "давхар нарийвчлал" форматаар хадгалагддаг тул бүгд 64 бит юм.

Тоон хувьсагчдыг ердийн аргаар үүсгэдэг:

var numb = 35; // натурал тоо

vardrob = 0.93; //аравтын төлөөлөл

var numb16 = 0xFF; // арван зургаатын тооллын систем

Бусад тоон дүрслэлийг мөн дэмждэг. Тиймээс та хөвөгч цэгийн тоог үүсгэж болно (түүнийг заримдаа "шинжлэх ухааны формат дахь тоо" гэж нэрлэдэг).

Маш сонирхолтой аргын дэмжлэгийг нэмсэн toLocaleString(), энэ нь ECMA 402-д заасан техникийн үзүүлэлтүүдийн дагуу бүх тоон параметрүүдийг форматладаг. Үүнээс шалтгаалан олон тооны, утасны дугаарууд, валют, тэр ч байтугай хувь нь харилцах цонхонд сайхан харагдаж байна.

варнум = 714000.80;

анхааруулга(num.toLocaleString());

Тооны төрлийн элементүүдтэй ажиллахын тулд бүхэл бүтэн дэлхийн объектыг олон янзын багцаар хангасан математик функцууд, хэний нэр Математик.

Үүнээс гадна тоон утгыг бүхэл тоо, аравны нэг, зуутын нэг гэх мэтээр дугуйруулдаг бусад аргууд байдаг. Тэдгээрийг бүгдийг нь илүү нарийвчлан авч үзье.

Агуу, хүчирхэг математик

Глобал математикийн объект нь маш олон төрлийн математик болон тригонометрийн функцуудыг агуулдаг. Энэ бол маш шаардлагатай объект бөгөөд дижитал өгөгдөлтэй ажиллахад хөгжүүлэгчдэд ихэвчлэн тусалдаг.

Бусад платформ дээр математикийн аналоги байдаг. Жишээлбэл, Java, C# зэрэг алдартай хэлнүүдэд Математик нь ижил стандарт функцуудыг дэмждэг анги юм. Таны харж байгаагаар энэ хэрэгсэл үнэхээр гайхалтай бөгөөд хүчирхэг юм.

Одоо би бөөрөнхийлөх тусгай аргуудыг судалж, тэдгээрийн талаар дэлгэрэнгүй ярихыг хүсч байна.

Math.floor()

Би эхэлье Математик.шал. Аргын нэрэнд анхаарлаа хандуулаарай. Логикийн хувьд энэ нь тодорхой болж байна бид ярьж байнабөөрөнхийлөх тухай, мөн "шал" гэсэн үгийн шууд орчуулга нь "шал" гэсэн утгатай бөгөөд энэ хэрэгсэл нь боловсруулсан утгыг доош нь дугуйруулна.

Энэ функцийг ашиглан боловсруулсан дугаар хэвээр үлдэж магадгүй юм. Учир нь дугуйралтыг хатуу бус тэгш бус байдлын дагуу гүйцэтгэдэг (<=). Таким образом, при отработке этой строчки кода:

анхааруулга(Math.floor(4.5));

хариулт нь 4-р тоо байх болно.

Math.ceil()

Дахин хэлэхэд гарчгийг хараарай (ийм байдлаар материал илүү хурдан шингэдэг). Хэрэв хэн нэгэн мэдэхгүй бол "тааз" нь "тааз" гэсэн үг юм. Энэ нь тоон өгөгдлийг хатуу бус тэгш бус байдлыг (>=) ашиглан бөөрөнхийлнө гэсэн үг юм.

анхааруулга(Math.ceil(4.5));

Таны таамаглаж байсанчлан хариулт нь 5-ын тоо байх болно.

математикийн дугуй ()

Энэ арга нь бутархай тоог хамгийн ойрын бүхэл тоо хүртэл дугуйруулдаг. Тиймээс, хэрэв бутархай хэсэг нь 0-ээс 0.5 хүртэлх зайд байвал дугуйралт нь бага утгатай болно. Хэрэв бутархай хэсэг нь 0.5-аас дараагийн бүхэл тоо хүртэлх мужид байвал илүү том бүхэл тоо хүртэл бөөрөнхийлөнө.

анхааруулга(Math.round(4.5));

Хүн бүр зөв хариулт 5 гэж бодсон эсвэл хэлсэн гэж найдаж байна.

Өөр хэдэн арга

JavaScript нь тоон дүрслэлийг бөөрөнхийлдөг өөр 2 аргатай. Гэсэн хэдий ч тэдгээр нь арай өөр юм.

зэрэг хэрэгслүүдийн талаар ярьж байна toFixed()болон toPrecision(). Тэд зөвхөн дугуйрсан төдийгүй тодорхой шинж тэмдгүүдийн нарийвчлалыг хариуцдаг. Илүү гүнзгийрүүлье.

toFixed()

Энэ механизмыг ашиглан утгыг хэдэн аравтын бутархай руу дугуйлахыг зааж өгч болно. Арга нь үр дүнг мөр болгон буцаана. Доор би гурван хувилбарыг хавсаргав өөр өөр сонголтууд. Хүлээн авсан хариултуудад дүн шинжилгээ хийх.

варнум = 5656.9393;

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

document.writeln(тоо.тогтоох(2)); // 5656.94

document.writeln(тоо.тогтоох(7)); // 5656.9393000

Таны харж байгаагаар, хэрэв та аргумент заагаагүй бол toFixed ()) бутархай утгыг дугуйруулна. бүхэлд ньтоо. Гурав дахь мөр нь дугуйрсан байна 2 тэмдэгт хүртэл,дөрөвдүгээрт, “7” параметртэй учир дахин гурван 0 нэмсэн.

toPrecision()

Энэ арга нь арай өөрөөр ажилладаг. Аргументийн оронд та хоёуланг нь хоосон зай үлдээж, параметрийг тохируулж болно. Гэсэн хэдий ч сүүлийнх нь таслалаас үл хамааран тоог заасан цифрийн тоо хүртэл дугуйруулна. Өмнөх жишээнээс дахин бичсэн хөтөлбөрийн үр дүн энд байна.

варнум = 5656.9393;

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

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

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

js-д 0-д хуваагдах онцлог

Математикийн хичээлээс та тэгээр хувааж болохгүй гэдгийг мэддэг. Энэ дүрмийг ихэнх програмчлалын хэлийг бүтээгчид үндэс болгон авчээ. Тиймээс тэгээр хуваах үед бүх програмууд алдаа гаргадаг.

Гэсэн хэдий ч, JavaScript энд бас сайн байсан. Тиймээс, ийм үйлдлийг гүйцэтгэх явцад алдааны тайлан гарахгүй ... учир нь ийм үйлдэл буцаж ирдэг "Хязгааргүй"!

Яагаад ийм? Математикийн ижил шинжлэх ухаанд мэдэгдэж байгаагаар хуваагч нь бага байх тусам үр дүн нь гардаг илүү. Тийм ч учраас энэхүү прототип дээр суурилсан хэлийг бүтээгчид загвараас татгалзаж, өөрсдийн замаар явахаар шийджээ.

Хязгааргүй байдлын утгыг шинээр олж мэдсэн хүмүүст зориулж би түүний онцлогуудыг доор тайлбарлав.

Хязгааргүй - хязгааргүй гэсэн үг бөгөөд математикийн ∞ тэмдэгтэй бүрэн тохирч байна.

Сөрөг байж болно. Арифметик операторуудтай ажиллах бүх стандарт дүрмийг мөн хадгалсан.

дохиолол (12/0); // Хязгааргүй байдал

дохиолол (12.34/0); // Хязгааргүй байдал

дохиолол (-3/0); // -Хязгааргүй

Үүн дээр, магадгүй би дуусгах болно. Хэрэв танд нийтлэл таалагдсан бол миний блогт бүртгүүлэхээ мартуузай. Сонирхолтой нийтлэлүүдийг холбож, найзуудтайгаа хуваалцаарай. Баяртай, баяртай!