جافا سكريبت تقريب. طرق تقريب الأرقام في جافا سكريبت

23.02.2019

غالبًا ما تنتج الحسابات نتائج خارج النطاقات المطلوبة. ونتيجة لذلك، فمن الضروري التنفيذ تقريب جافا سكريبتحتى قيمة معينة.

لماذا الأرقام المستديرة؟

لا تقوم JavaScript بتخزين الأعداد الصحيحة لأن قيمها يتم تمثيلها كأرقام فاصلة عائمة. لا يمكن تمثيل العديد من الكسور كأرقام بعدد محدود محدد من المنازل العشرية، لذلك يمكن لجافا سكريبت إنشاء نتائج مثل ما يلي:

0.1 * 0.2; > 0.020000000000000004

ومن الناحية العملية، لن يحدث هذا أي فرق منذ ذلك الحين نحن نتحدث عنحول خطأ 2 كوينتيليون. لكن هذا قد يؤثر على النتائج عند التعامل مع الأرقام التي تمثل قيم العملة أو النسب المئوية أو حجم الملف. ولذلك، عليك أن تفعل أو إلى منزلة عشرية معينة.

تقريب الأعداد العشرية

لقطع" عدد عشري، يتم استخدام الأساليب toFixed() أو toPrecision(). يأخذ كلاهما وسيطة واحدة، والتي تحدد عدد المنازل المهمة والعشرية التي سيتم تضمينها في النتيجة:

  • إذا لم يكن لدى toFixed() وسيطة محددة، فإن القيمة الافتراضية هي 0، أي لا توجد منازل عشرية؛ القيمة القصوىالوسيطة 20 ؛
  • إذا لم يتم إعطاء أي وسيطة إلى toPrecision()، فلن يتغير الرقم.

فار راندنوم = 6.25؛ randNum.toFixed(); > "6" Math.PI.toPrecision(1); > "3" var randNum = 87.335; randNum.toFixed(2); > "87.33" var randNum = 87.337; randNum.toPrecision(3); > "87.3"

ملحوظة

يقوم كل من toFixed() وtoPrecision بإرجاع تمثيل سلسلة مستديرة للنتيجة، بدلاً من رقم. هذا يعني أن إضافة التقريب إلى randNum سيؤدي إلى سلسلة من السلاسل بدلاً من رقم واحد:

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

إذا كنت بحاجة للدخول نتيجة جافا سكريبتللتقريب إلى أقرب جزء من مائة من الرقم، استخدم parseFloat() :

فار راندنوم = 6.25؛ var rounded = parseFloat(randNum.toFixed(1)); console.log(rounded); > 6.3

toFixed() و toPrecision() موجودان أيضًا طرق مفيدةلاقتطاع كمية كبيرةمنازل عشرية. يكون هذا مفيدًا عند التعامل مع الأرقام التي تمثل الوحدات النقدية:

var fullNum = 1 var DollarCents = fullNum.toFixed(2); console.log(dollarsCents); > "1.00"

لاحظ أنه إذا كان الرقم يحتوي على أرقام أكثر من الدقة المحددة، فسيقوم toPrecision بإخراج النتيجة بتنسيق علمي:

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

كيفية تجنب الأخطاء عند تقريب الأعداد العشرية

في بعض الحالات، يتم تنفيذ toFixed وtoPrecision جافا سكريبت التقريب 5 لأسفل، وليس أكثر:

فار numTest = 1.005; numTest.toFixed(2); > 1؛

يجب أن تكون نتيجة المثال أعلاه 1.01، وليس 1. إذا كنت تريد تجنب هذا الخطأ، أوصي باستخدام الأرقام الأسية:

دالة مستديرة(قيمة، كسور عشرية) (إرجاع Number(Math.round(value+"e"+decimals)+"e-"+decimals); )

طلب:

جولة (1.005،2)؛ > 1.01

إذا كنت بحاجة إلى المزيد حل موثوقمن التقريب، فهو متوفر في MDN.

التقريب مع إبسيلون

طريقة بديلة جافا سكريبت التقريب إلى أعشارتم تقديمه في ES6 ( المعروف أيضًا باسم جافا سكريبت 2015). « ماكينة ابسيلون"يوفر هامشًا معقولًا للخطأ عند مقارنة رقمين عائمين. وبدون التقريب، قد تؤدي المقارنات إلى نتائج مشابهة لما يلي:

0.1 + 0.2 === 0.3 > خطأ

يمكن استخدام Math.EPSILON في دالة للحصول على مقارنة صالحة:

الدالة 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. ولكن إذا كنت بحاجة إلى تقديم الدعم في المتصفحات القديمة، فأنت بحاجة إلى استخدام polyfills.

اقتطاع الأعداد العشرية

جميع الأساليب المقدمة سابقا تؤدي جافا سكريبت التقريب إلى أعشار. لاقتطاع رقم موجب، عدد إيجابيإلى منزلتين عشريتين، اضربه في 100، ثم اقتطعه مرة أخرى، ثم قسم النتيجة على 100، ستحتاج إلى:

الدالة مبتورة(num) (إرجاع Math.trunc(num * 100) / 100;) مبتورة(3.1416) > 3.14

إذا كنت بحاجة إلى شيء أكثر مرونة، فيمكنك استخدام عامل التشغيل bitwise:

تم اقتطاع الدالة (num، decimalPlaces) ( var numPowerConverter = Math.pow(10, decimalPlaces); return ~~(num * numPowerConverter)/numPowerConverter; )

الاستخدام:

فار راندنت = 35.874993; اقتطاع(randInt,3); > 35.874

التقريب إلى أقرب رقم

لتنفيذ تقريب جافا سكريبت إلى أقرب عدد صحيح، يتم استخدام Math.round() :

جولة الرياضيات (4.3) > 4 جولة الرياضيات (4.5) > 5

لاحظ أن " نصف القيم"، مثل .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

إذا كنت بحاجة إلى تجنب ذلك، فاستخدم تقريب JavaScript Math باستخدام Math.trunc() ، المدعوم في الكل المتصفحات الحديثة(يستثني آي إي/إيدج):

Math.trunc(-41.43); > -41

توفر MDN أيضًا ملف متعدد الخطوط من ثلاثة أسطر لتوفير الدعم لـ Math.trunc في المتصفحات القديمة وIE/Edge.

التقريب إلى أقرب عدد صحيح

إذا كنت تريد تقريب الأرقام العشرية لأعلى، فاستخدم 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

إذا كنت بحاجة إلى JavaScript للتقريب إلى منزلتين عشريتين، فيمكنك تمرير كل من المصدر والمضاعف إلى الوظيفة:

دالة roundToMultiple(num, multiple) (إرجاع Math.round(num/multiple)*multiple;)

لاستخدام الدالة، قم بتضمين الرقم المراد تقريبه والمضاعف في استدعائه:

فار الرقم الأولي = 11؛ فار متعدد = 10؛ roundToMultiple(initialNumber, multiple); > 10؛

لتقريب القيم لأعلى أو لأسفل فقط، استبدل round بالسقف أو الأرضية في الدالة.

ربط النطاق

في بعض الأحيان تحتاج إلى الحصول على قيمة x التي يجب أن تكون ضمن نطاق معين. على سبيل المثال، نحتاج إلى قيمة من 1 إلى 100، لكننا نحصل على القيمة 123. لإصلاح هذا يمكنك استخدام min() ( إرجاع أصغر رقم) والحد الأقصى ( إرجاع الحد الأقصى للعدد المسموح به).

الاستخدام:

فار lowBound = 1; فار هايبوند = 100؛ فار نومينبوت = 123؛ var فرضت = Math.max(lowBound, Math.min(numInput, HighBound)); console.log(clamped); > 100؛

يمكنك إنشاء دالة أو امتداد لفئة الرقم:

Number.prototype.clamp = function(min, max) ( return Math.min(Math.max(this, min), max); );

الاستخدام:

(numInput).clamp(lowBound, HighBound);

تقريب غاوسي

التقريب الغوسي ("الخدمات المصرفية"، متقاربة أو الهولندية) هي طريقة تقريب بدون خطأ إحصائي. معيار تقريب جافا سكريبتفي بعض الأحيان يعطي أخطاء الجانب الكبير. يتجنب التقريب الغاوسي هذا الخطأ عن طريق التقريب إلى أقرب رقم زوجي. القرار الأفضلالذي أعرفه.

في كثير من الأحيان، لا تعطي العمليات الحسابية في JavaScript النتائج التي نريدها بالضبط. بالطبع، يمكننا أن نفعل ما نريد بالأرقام - التقريب للأعلى أو للأسفل، تعيين النطاقات، قطعها أرقام غير ضروريةما يصل إلى عدد معين من المنازل العشرية، كل هذا يتوقف على ما تريد القيام به بعد ذلك مع هذا الرقم.

لماذا يعتبر التقريب ضروريا؟

واحد من الفضوليين جوانب جافا سكريبتهو أنها لا تقوم فعليًا بتخزين الأعداد الصحيحة، فنحن نعمل مباشرة مع أرقام الفاصلة العائمة. هذا، بالإضافة إلى حقيقة أن العديد من القيم الكسرية لا يمكن التعبير عنها بعدد محدود من المنازل العشرية، في JavaScript يمكننا الحصول على نتائج مثل هذه:

0.1 * 0.2; > 0.020000000000000004 0.3 - 0.1 > 0.19999999999999998
ولأغراض عملية، لا يهم عدم الدقة هذا، ففي حالتنا نحن نتحدث عن خطأ في كوينتيليون جزء، ومع ذلك، فإن هذا قد يخيب آمال البعض. يمكننا أيضًا الحصول على نتائج غريبة بعض الشيء عند العمل مع الأرقام التي تمثل العملات أو النسب المئوية أو أحجام الملفات. من أجل تصحيح هذه الأخطاء، نحتاج فقط إلى أن نكون قادرين على تقريب النتائج، ويكفي ضبط الدقة العشرية.

أرقام التقريب لديها الاستخدام العملي، ربما نتعامل مع رقم ضمن نطاق ما، على سبيل المثال، نريد تقريب القيمة إلى أقرب عدد صحيح بدلاً من العمل فقط مع الجزء العشري.

تقريب الأعداد العشرية

لقص رقم عشري، استخدم toFixed أو الأسلوب toPrecision. كلاهما يأخذ حجة واحدة، والتي تحدد، على التوالي، عدد الشخصيات الهامة (أي. المجموعالأرقام المستخدمة في رقم) أو المنازل العشرية (الرقم بعد العلامة العشرية) يجب أن تتضمن النتيجة:
  1. إذا لم يتم تعريف وسيطة لـ toFixed()، فستكون افتراضيًا يساوي الصفر، وهو ما يعني 0 منزلة عشرية، وتكون قيمة الوسيطة بحد أقصى 20.
  2. إذا لم يتم إعطاء أي وسيطة إلى الدقة، فسيتم ترك الرقم دون تغيير
دع 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"
تقوم كلتا الطريقتين toFixed() وtoPrecision() بإرجاع تمثيل سلسلة للنتيجة، وليس رقمًا. هذا يعني أنه عند جمع قيمة مقربة باستخدام randNum، فإنه سينتج سلسلة من السلاسل بدلاً من مجموع الأرقام:

دع randNum = 6.25؛ Let rounded = randNum.toFixed(); // "6" console.log(randNum + rounded); > "6.256"
إذا كنت تريد أن تكون النتيجة نوع رقميالبيانات، فسوف تحتاج إلى تطبيق parseFloat:

دع randNum = 6.25؛ Let rounded = parseFloat(randNum.toFixed(1)); console.log(rounded); > 6.3
يرجى ملاحظة أنه يتم تقريب القيم 5 إلا في حالات نادرة.

تعد الطرق toFixed() و toPrecision() مفيدة لأنها لا تستطيع القص فقط الجزء الكسري، ولكن أيضًا لإضافة منازل عشرية، وهو أمر مناسب عند التعامل مع العملة:

دع WHOLENUM = 1 Let DollarCents = fullNum.toFixed(2); console.log(dollarsCents); > "1.00"
لاحظ أن toPrecision سينتج النتيجة بالترميز العلمي إذا كان عدد الأعداد الصحيحة أكبر من الدقة نفسها:

دع الأعداد = 123.435 num.toPrecision(2); > "1.2e+2"

كيفية تجنب أخطاء التقريب مع الكسور العشرية

في بعض الحالات، يقوم toFixed وtoPrecision بتقريب القيمة 5 للأسفل وللأعلى:

دع numTest = 1.005؛ numTest.toFixed(2); > "1.00"
يجب أن تكون نتيجة الحساب أعلاه 1.01، وليس 1. إذا كنت ترغب في تجنب خطأ مماثل، يمكننا استخدام الحل الذي اقترحه جاك إل مور، والذي يستخدم الأرقام الأسية للحساب:

دالة دائرية(قيمة، كسور عشرية) (إرجاع Number(Math.round(value+"e"+decimals)+"e-"+decimals);)
الآن:

جولة (1.005،2)؛ > 1.01
إذا كنت تريد حلاً أكثر قوة من الحل الموضح أعلاه، فيمكنك الانتقال إلى MDN.

آلة إبسيلون التقريب

تم تقديم طريقة بديلة لتقريب الأرقام العشرية في ES6. يوفر تقريب إبسيلون الآلة هامشًا معقولًا للخطأ عند مقارنة رقمين عائمين. وبدون التقريب، قد تؤدي المقارنات إلى نتائج مشابهة لما يلي:

0.1 + 0.2 === 0.3 > خطأ
نستخدم Math.EPSILON في وظيفتنا للحصول على مقارنة صحيحة:

الدالة 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:

الدالة مبتورة(num) (إرجاع Math.trunc(num * 100) / 100;) مبتورة(3.1416) > 3.14
إذا كنت تريد تكييف الطريقة مع أي عدد من المنازل العشرية، فيمكنك استخدام النفي المزدوج للبت:

تم اقتطاع الدالة (num، decimalPlaces) ( Let numPowerConverter = Math.pow(10, decimalPlaces); return ~~(num * numPowerConverter)/numPowerConverter; )
الآن:

دع randInt = 35.874993؛ اقتطاع(randInt,3); > 35.874

التقريب إلى أقرب رقم

لتقريب رقم عشري إلى أقرب رقم لأعلى أو لأسفل، أيهما الأقرب إليه، استخدم Math.round():

جولة الرياضيات (4.3) > 4 جولة الرياضيات (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
ولكن إذا كنت تريد تجنب حالة مماثلة، استخدم Math.trunc، المدعوم في جميع المتصفحات الحديثة (باستثناء IE/Edge):

Math.trunc(-41.43); > -41
ستجد في MDN ملف polyfill الذي سيوفر الدعم لـ Math.trunc في المتصفحات وIE/Edge.

التقريب إلى أقرب عدد صحيح

من ناحية أخرى، إذا كنت بحاجة دائمًا إلى التقريب لأعلى، فاستخدم 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(num, multiple) (إرجاع Math.round(num/multiple)*multiple;)
الآن:

دع الرقم الأولي = 11؛ دع المتعدد = 10؛ roundToMultiple(initialNumber, multiple); > 10؛

تحديد رقم في النطاق

هناك العديد من الحالات التي نريد فيها الحصول على قيمة x التي تقع ضمن النطاق. على سبيل المثال، قد نحتاج إلى قيمة تتراوح بين 1 و100، ولكن انتهى بنا الأمر إلى قيمة 123. لإصلاح هذه المشكلة، يمكننا استخدام min (إرجاع أصغر مجموعة من الأرقام) وmax (إرجاع أكبر مجموعة من أي مجموعة) من الأرقام). في مثالنا، النطاق من 1 إلى 100:

Let lowBound = 1; دع HighBound = 100؛ دع numInput = 123؛ دع فرضت = Math.max(lowBound, Math.min(numInput, HighBound)); console.log(clamped); > 100؛
مرة أخرى، يمكننا إعادة استخدام العملية ولف كل شيء في دالة، باستخدام الحل الذي اقترحه دانييل إكس مور:

Number.prototype.clamp = function(min, max) ( return Math.min(Math.max(this, min), 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 (ن)، و = ن - أنا، ه = 1e-8، ص = (و > 0.5 - ه && f< 0.5 + e) ? ((i % 2 == 0) ? i: i + 1) : Math.round(n); return d ? r / m: r; }
الآن:

غاوس راوند (2.5) > 2 غاوس راوند (3.5) > 4 غاوس راوند (2.57،1) > 2.6
العلامة العشرية في CSS:

نظرًا لأن JavaScript يُستخدم غالبًا لإنشاء تعيينات موضعية لعناصر HTML، فقد تتساءل عما سيحدث إذا أنشأنا قيمًا عشرية لعناصرنا:

#box (العرض: 63.667731993 بكسل;)
والخبر السار هو أن المتصفحات الحديثة سوف تحترم القيم العشرية في نموذج الكتلة، بما في ذلك النسبة المئوية أو وحدات البكسل.

فرز

في كثير من الأحيان يتعين علينا فرز بعض العناصر، على سبيل المثال، لدينا مجموعة من سجلات اللعبة، ويجب تنظيمها بترتيب تنازلي حسب رتبة اللاعب. للأسف، الطريقة القياسيةتحتوي الدالةsort()‎ على بعض القيود المدهشة: فهي تعمل بشكل جيد مع العمليات المستخدمة بشكل متكرر في الكلمات الإنجليزية، ولكنه يتعطل فورًا عند مواجهة أرقام أو أحرف فريدة أو كلمات كبيرة.

الترتيب أبجديا

يبدو أن فرز المصفوفة أبجديًا يجب أن يكون مهمة بسيطة:

دع الفاكهة = ["قرع الجوز"، "مشمش"، "شمام"]؛ Fruit.sort(); > "مشمش"، "قرع الجوز"، "شمام"]
ومع ذلك، فإننا نواجه مشكلة بمجرد أن يكون أحد العناصر كبيرًا:

دع الفاكهة = ["قرع الجوز"، "المشمش"، "الشمام"]؛ Fruit.sort(); > "الشمام"، "المشمش"، "قرع الجوز"]
وذلك لأن أداة الفرز، بشكل افتراضي، تقوم بمقارنة الحرف الأول الممثل في Unicode. Unicode هو رمز فريد لأي شخصية، بغض النظر عن النظام الأساسي، بغض النظر عن البرنامج، بغض النظر عن اللغة. على سبيل المثال، إذا نظرت إلى جدول الرموز، فإن الحرف "a" له القيمة U+0061 (في نظام سداسي عشري 0x61)، في حين أن الحرف "C" لديه الرمز U+0043 (0x43)، والذي يأتي في جدول Unicode أقدم من الحرف "a".

لفرز مصفوفة قد تحتوي على أحرف أولى مختلطة، نحتاج إما إلى تحويل جميع العناصر مؤقتًا إلى أحرف صغيرة، أو تحديد ترتيب الفرز باستخدام الأسلوب localeCompare() مع بعض الوسائط. كقاعدة عامة، في مثل هذه الحالة، من الأفضل إنشاء وظيفة للاستخدام المتكرر على الفور:

الدالة alphaSort(arr) ( arr.sort(function (a, b) ( return a.localeCompare(b, "en", ("sensitivity": "base")); )); ) دع الفاكهة = ["قرع الجوز" "، "مشمش"، "شمام"]؛ ترتيب ألفا (الفاكهة)>
إذا كنت ترغب في الحصول على مصفوفة مرتبة عكسيًا ترتيب ابجدي، فقط قم بتبديل موضعي a و b في الوظيفة:

الدالة alphaSort(arr) ( arr.sort(function (a, b) ( return b.localeCompare(a, "en", ("sensitivity": "base")); )); ) دع الفاكهة = ["قرع الجوز" "، "مشمش"، "شمام"]؛ alphaSort(فاكهة) > ["الشمام"، "قرع الجوز"، "المشمش"]
تجدر الإشارة هنا إلى أن localeCompare يُستخدم مع الوسائط، وعلينا أيضًا أن نتذكر أنه مدعوم من IE11+، بالنسبة للإصدارات الأقدم من IE، يمكننا استخدامه بدون وسائط، وبالأحرف الصغيرة:

الدالة caseSort(arr) ( arr.sort(function (a, b) ( return a.toLowerCase().localeCompare(b.toLowerCase()); )); ) Let Fruit = ["قرع الجوز"، "المشمش"، "الشمام"]؛ caseSort(fruit) > ["مشمش"، "قرع الجوز"، "شمام"]

فرز رقمي

كل هذا لا ينطبق على المثال الذي تحدثنا عنه أعلاه حول مجموعة سجلات اللعبة. مع بعض المصفوفات الرقمية، يعمل الفرز بشكل جيد، ولكن في مرحلة ما قد تكون النتيجة غير متوقعة:

دع أعلى الدرجات = ; HighScores.sort(); >
الأمر هو أن طريقة الترتيب () تقوم بإجراء مقارنة معجمية: مما يعني أنه سيتم تحويل الأرقام إلى سلسلة وسيتم إجراء المقارنات مرة أخرى عن طريق مطابقة الحرف الأول من تلك السلسلة بترتيب الأحرف في جدول Unicode . ولذلك، نحن بحاجة مرة أخرى إلى تحديد ترتيب الفرز لدينا:

دع أعلى الدرجات = ; HighScores.sort(function(a,b) ( return a - b; )); >
مرة أخرى، لفرز الأرقام إلى ترتيب عكسي، قم بتبديل موضعي a و b في الوظيفة.

فرز بنية تشبه JSON

وأخيرًا، إذا كان لدينا بنية بيانات تشبه JSON ممثلة في مجموعة من سجلات اللعبة:

دع الدرجات = [ ( "الاسم": "دانيال"، "النتيجة": 21768)، ( "الاسم": "مايكل"، "النتيجة": 33579)، ( "الاسم": "أليسون"، "النتيجة": 38395 )];
في ES6+، يمكنك استخدام وظائف الأسهم:

Scores.sort((a, b) => b.score - a.score));
بالنسبة للمتصفحات الأقدم التي لا تتمتع بهذا الدعم:

Scores.sort(function(a, b) ( return a.score - b.score ));
كما ترون، يعد الفرز في JavaScript أمرًا غامضًا إلى حد ما، وآمل أن تجعل هذه الأمثلة الحياة أسهل بطريقة ما.

العمل مع وظائف الطاقة

الأس هو عملية تم تعريفها في الأصل على أنها نتيجة الضرب المتكرر لعدد طبيعي في نفسه؛ الجذر التربيعي لـ 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 هو التالي نسخة جافا سكريبت، من حيث المبدأ، يمكننا استخدام عامل الأسي الجديد المقترح - * *، قد يكون هذا الشكل من التدوين أكثر وصفيًا:

3 ** 2 > 9
على هذه اللحظةدعم هذا المشغل محدود للغاية، لذلك لا ينصح باستخدامه.

يمكن أن تكون وظيفة الطاقة مفيدة في أغلب الأحيان حالات مختلفة. مثال بسيط لحساب عدد الثواني في الساعة: Math.pow (60,2).

الجذور التربيعية والتكعيبية

Math.sqrt() و Math.cbrt() هما عكس Math.pow(). كما نتذكر، الجذر التربيعي لـ a هو الرقم الذي يعطينا عندما يتم تربيعه.

الرياضيات.sqrt(9) > 3
وفي الوقت نفسه، الجذر التكعيبي لـ a هو الرقم الذي يعطي s عند رفعه إلى مكعب.

الرياضيات.cbrt(125) > 5
تم إدخال Math.cbrt() مؤخرًا في مواصفات JavaScript، وبالتالي فهو مدعوم فقط في المتصفحات الحديثة: Chrome 38+ وFirefox وOpera 25+ وSafari 7.1+. ستلاحظ ذلك متصفح الانترنتليس في هذه القائمة، ولكنك ستجد polyfill على MDN.

أمثلة

بالطبع يمكننا استخدام قيم غير صحيحة في إحدى هذه الوظائف:

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()، وهي الدالة الأسية للأرقام بشكل عام. ملاحظة: في اللغة الإنجليزيةتتم ترجمة "الأس" على أنها "الأس"، لذلك من المرجح أن ينطبق هذا على المتحدثين باللغة الإنجليزية، على الرغم من وجود أسماء بديلة للأس، مثل الفهرس، والقوة.

الثوابت الرياضية

أصبح التعامل مع الرياضيات في JavaScript أسهل بفضل عدد من الثوابت المضمنة. هذه الثوابت هي خصائص كائن الرياضيات. تجدر الإشارة إلى أن الثوابت تكتب بأحرف كبيرة، وليس تدوين CamelCase.

يمكن للمستخدمين المسجلين فقط المشاركة في الاستطلاع. ، لو سمحت.

العلامات: إضافة علامات في كثير من الأحيان، لا تعطي العمليات الحسابية في JavaScript النتائج التي نريدها بالضبط. بالطبع، يمكننا أن نفعل ما نريد بالأرقام - التقريب لأعلى أو لأسفل، وتعيين النطاقات، وقطع الأرقام غير الضرورية إلى عدد معين من المنازل العشرية، كل هذا يتوقف على ما تريد القيام به بهذا الرقم في المستقبل.

لماذا يعتبر التقريب ضروريا؟

أحد الجوانب المثيرة للاهتمام في JavaScript هو أنها لا تقوم فعليًا بتخزين الأعداد الصحيحة، بل نعمل مباشرة مع أرقام الفاصلة العائمة. هذا، بالإضافة إلى حقيقة أن العديد من القيم الكسرية لا يمكن التعبير عنها بعدد محدود من المنازل العشرية، في JavaScript يمكننا الحصول على نتائج مثل هذه:

0.1 * 0.2; > 0.020000000000000004 0.3 - 0.1 > 0.19999999999999998
ولأغراض عملية، لا يهم عدم الدقة هذا، ففي حالتنا نحن نتحدث عن خطأ في كوينتيليون جزء، ومع ذلك، فإن هذا قد يخيب آمال البعض. يمكننا أيضًا الحصول على نتائج غريبة بعض الشيء عند العمل مع الأرقام التي تمثل العملات أو النسب المئوية أو أحجام الملفات. من أجل تصحيح هذه الأخطاء، نحتاج فقط إلى أن نكون قادرين على تقريب النتائج، ويكفي ضبط الدقة العشرية.

لتقريب الأرقام تطبيقات عملية، حيث يمكننا التعامل مع رقم ضمن نطاق معين، على سبيل المثال نريد تقريب قيمة إلى أقرب رقم صحيح بدلاً من العمل فقط مع الجزء العشري.

تقريب الأعداد العشرية

لقص رقم عشري، استخدم toFixed أو الأسلوب toPrecision. يأخذ كلاهما وسيطة واحدة تحدد، على التوالي، عدد الأرقام المهمة (أي إجمالي عدد الأرقام المستخدمة في الرقم) أو المنازل العشرية (الرقم بعد العلامة العشرية) التي يجب أن تتضمن النتيجة:
  1. إذا لم يتم تعريف وسيطة لـ toFixed()، فستكون القيمة الافتراضية صفر، وهو ما يعني 0 منزلة عشرية، وتكون قيمة الوسيطة بحد أقصى 20.
  2. إذا لم يتم إعطاء أي وسيطة إلى الدقة، فسيتم ترك الرقم دون تغيير
دع 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"
تقوم كلتا الطريقتين toFixed() وtoPrecision() بإرجاع تمثيل سلسلة للنتيجة، وليس رقمًا. هذا يعني أنه عند جمع قيمة مقربة باستخدام randNum، فإنه سينتج سلسلة من السلاسل بدلاً من مجموع الأرقام:

دع randNum = 6.25؛ Let rounded = randNum.toFixed(); // "6" console.log(randNum + rounded); > "6.256"
إذا كنت تريد أن تكون النتيجة نوع بيانات رقمي، فستحتاج إلى استخدام parseFloat:

دع randNum = 6.25؛ Let rounded = parseFloat(randNum.toFixed(1)); console.log(rounded); > 6.3
يرجى ملاحظة أنه يتم تقريب القيم 5 إلا في حالات نادرة.

تُعد التابعتان toFixed() وtoPrecision() مفيدة لأنهما لا تستطيعان قطع الجزء الكسري فحسب، بل تضيفان أيضًا منازل عشرية، وهو أمر مناسب عند التعامل مع العملة:

دع WHOLENUM = 1 Let DollarCents = fullNum.toFixed(2); console.log(dollarsCents); > "1.00"
لاحظ أن toPrecision سينتج النتيجة بالترميز العلمي إذا كان عدد الأعداد الصحيحة أكبر من الدقة نفسها:

دع الأعداد = 123.435 num.toPrecision(2); > "1.2e+2"

كيفية تجنب أخطاء التقريب مع الكسور العشرية

في بعض الحالات، يقوم toFixed وtoPrecision بتقريب القيمة 5 للأسفل وللأعلى:

دع numTest = 1.005؛ numTest.toFixed(2); > "1.00"
يجب أن تكون نتيجة الحساب أعلاه 1.01، وليس 1. إذا كنت ترغب في تجنب خطأ مماثل، يمكننا استخدام الحل الذي اقترحه جاك إل مور، والذي يستخدم الأرقام الأسية للحساب:

دالة دائرية(قيمة، كسور عشرية) (إرجاع Number(Math.round(value+"e"+decimals)+"e-"+decimals);)
الآن:

جولة (1.005،2)؛ > 1.01
إذا كنت تريد حلاً أكثر قوة من الحل الموضح أعلاه، فيمكنك الانتقال إلى MDN.

آلة إبسيلون التقريب

تم تقديم طريقة بديلة لتقريب الأرقام العشرية في ES6. يوفر تقريب إبسيلون الآلة هامشًا معقولًا للخطأ عند مقارنة رقمين عائمين. وبدون التقريب، قد تؤدي المقارنات إلى نتائج مشابهة لما يلي:

0.1 + 0.2 === 0.3 > خطأ
نستخدم Math.EPSILON في وظيفتنا للحصول على مقارنة صحيحة:

الدالة 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:

الدالة مبتورة(num) (إرجاع Math.trunc(num * 100) / 100;) مبتورة(3.1416) > 3.14
إذا كنت تريد تكييف الطريقة مع أي عدد من المنازل العشرية، فيمكنك استخدام النفي المزدوج للبت:

تم اقتطاع الدالة (num، decimalPlaces) ( Let numPowerConverter = Math.pow(10, decimalPlaces); return ~~(num * numPowerConverter)/numPowerConverter; )
الآن:

دع randInt = 35.874993؛ اقتطاع(randInt,3); > 35.874

التقريب إلى أقرب رقم

لتقريب رقم عشري إلى أقرب رقم لأعلى أو لأسفل، أيهما الأقرب إليه، استخدم Math.round():

جولة الرياضيات (4.3) > 4 جولة الرياضيات (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
ولكن إذا كنت تريد تجنب هذا الموقف، فاستخدم Math.trunc، المدعوم في جميع المتصفحات الحديثة (باستثناء IE/Edge):

Math.trunc(-41.43); > -41
ستجد في MDN ملف polyfill الذي سيوفر الدعم لـ Math.trunc في المتصفحات وIE/Edge.

التقريب إلى أقرب عدد صحيح

من ناحية أخرى، إذا كنت بحاجة دائمًا إلى التقريب لأعلى، فاستخدم 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(num, multiple) (إرجاع Math.round(num/multiple)*multiple;)
الآن:

دع الرقم الأولي = 11؛ دع المتعدد = 10؛ roundToMultiple(initialNumber, multiple); > 10؛

تحديد رقم في النطاق

هناك العديد من الحالات التي نريد فيها الحصول على قيمة x التي تقع ضمن النطاق. على سبيل المثال، قد نحتاج إلى قيمة تتراوح بين 1 و100، ولكن انتهى بنا الأمر إلى قيمة 123. لإصلاح هذه المشكلة، يمكننا استخدام min (إرجاع أصغر مجموعة من الأرقام) وmax (إرجاع أكبر مجموعة من أي مجموعة) من الأرقام). في مثالنا، النطاق من 1 إلى 100:

Let lowBound = 1; دع HighBound = 100؛ دع numInput = 123؛ دع فرضت = Math.max(lowBound, Math.min(numInput, HighBound)); console.log(clamped); > 100؛
مرة أخرى، يمكننا إعادة استخدام العملية ولف كل شيء في دالة، باستخدام الحل الذي اقترحه دانييل إكس مور:

Number.prototype.clamp = function(min, max) ( return Math.min(Math.max(this, min), 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 (ن)، و = ن - أنا، ه = 1e-8، ص = (و > 0.5 - ه && f< 0.5 + e) ? ((i % 2 == 0) ? i: i + 1) : Math.round(n); return d ? r / m: r; }
الآن:

غاوس راوند (2.5) > 2 غاوس راوند (3.5) > 4 غاوس راوند (2.57،1) > 2.6
العلامة العشرية في CSS:

نظرًا لأن JavaScript يُستخدم غالبًا لإنشاء تعيينات موضعية لعناصر HTML، فقد تتساءل عما سيحدث إذا أنشأنا قيمًا عشرية لعناصرنا:

#box (العرض: 63.667731993 بكسل;)
والخبر السار هو أن المتصفحات الحديثة ستحترم القيم العشرية في نموذج الكتلة، بما في ذلك النسبة المئوية أو وحدات البكسل.

فرز

في كثير من الأحيان يتعين علينا فرز بعض العناصر، على سبيل المثال، لدينا مجموعة من سجلات اللعبة، ويجب تنظيمها بترتيب تنازلي حسب رتبة اللاعب. لسوء الحظ، فإن طريقة الفرز القياسية () لها بعض القيود المدهشة: فهي تعمل بشكل جيد مع الكلمات الإنجليزية الشائعة، ولكنها تتعطل فورًا عندما تواجه أرقامًا أو أحرفًا فريدة أو كلمات كبيرة.

الترتيب أبجديا

يبدو أن فرز المصفوفة أبجديًا يجب أن يكون مهمة بسيطة:

دع الفاكهة = ["قرع الجوز"، "مشمش"، "شمام"]؛ Fruit.sort(); > "مشمش"، "قرع الجوز"، "شمام"]
ومع ذلك، فإننا نواجه مشكلة بمجرد أن يكون أحد العناصر كبيرًا:

دع الفاكهة = ["قرع الجوز"، "المشمش"، "الشمام"]؛ Fruit.sort(); > "الشمام"، "المشمش"، "قرع الجوز"]
وذلك لأن أداة الفرز، بشكل افتراضي، تقوم بمقارنة الحرف الأول الممثل في Unicode. Unicode هو رمز فريد لأي شخصية، بغض النظر عن النظام الأساسي، بغض النظر عن البرنامج، بغض النظر عن اللغة. على سبيل المثال، إذا نظرت إلى جدول الرموز، فإن الحرف "a" له القيمة U+0061 (بالنظام الست عشري 0x61)، في حين أن الحرف "C" له الرمز U+0043 (0x43)، والذي يأتي سابقًا في Unicode الجدول من الحرف "أ".

لفرز مصفوفة قد تحتوي على أحرف أولى مختلطة، نحتاج إما إلى تحويل جميع العناصر مؤقتًا إلى أحرف صغيرة، أو تحديد ترتيب الفرز باستخدام الأسلوب localeCompare() مع بعض الوسائط. كقاعدة عامة، في مثل هذه الحالة، من الأفضل إنشاء وظيفة للاستخدام المتكرر على الفور:

الدالة alphaSort(arr) ( arr.sort(function (a, b) ( return a.localeCompare(b, "en", ("sensitivity": "base")); )); ) دع الفاكهة = ["قرع الجوز" "، "مشمش"، "شمام"]؛ ترتيب ألفا (الفاكهة)>
إذا كنت تريد ترتيب المصفوفة بترتيب أبجدي عكسي، فما عليك سوى تبديل موضعي a وb في الدالة:

الدالة alphaSort(arr) ( arr.sort(function (a, b) ( return b.localeCompare(a, "en", ("sensitivity": "base")); )); ) دع الفاكهة = ["قرع الجوز" "، "مشمش"، "شمام"]؛ alphaSort(فاكهة) > ["الشمام"، "قرع الجوز"، "المشمش"]
تجدر الإشارة هنا إلى أن localeCompare يُستخدم مع الوسائط، وعلينا أيضًا أن نتذكر أنه مدعوم من IE11+، بالنسبة للإصدارات الأقدم من IE، يمكننا استخدامه بدون وسائط، وبالأحرف الصغيرة:

الدالة caseSort(arr) ( arr.sort(function (a, b) ( return a.toLowerCase().localeCompare(b.toLowerCase()); )); ) Let Fruit = ["قرع الجوز"، "المشمش"، "الشمام"]؛ caseSort(fruit) > ["مشمش"، "قرع الجوز"، "شمام"]

فرز رقمي

كل هذا لا ينطبق على المثال الذي تحدثنا عنه أعلاه حول مجموعة سجلات اللعبة. مع بعض المصفوفات الرقمية، يعمل الفرز بشكل جيد، ولكن في مرحلة ما قد تكون النتيجة غير متوقعة:

دع أعلى الدرجات = ; HighScores.sort(); >
الأمر هو أن طريقة الترتيب () تقوم بإجراء مقارنة معجمية: مما يعني أنه سيتم تحويل الأرقام إلى سلسلة وسيتم إجراء المقارنات مرة أخرى عن طريق مطابقة الحرف الأول من تلك السلسلة بترتيب الأحرف في جدول Unicode . ولذلك، نحن بحاجة مرة أخرى إلى تحديد ترتيب الفرز لدينا:

دع أعلى الدرجات = ; HighScores.sort(function(a,b) ( return a - b; )); >
مرة أخرى، لفرز الأرقام بترتيب عكسي، قم بتبديل موضعي a وb في الدالة.

فرز بنية تشبه JSON

وأخيرًا، إذا كان لدينا بنية بيانات تشبه JSON ممثلة في مجموعة من سجلات اللعبة:

دع الدرجات = [ ( "الاسم": "دانيال"، "النتيجة": 21768)، ( "الاسم": "مايكل"، "النتيجة": 33579)، ( "الاسم": "أليسون"، "النتيجة": 38395 )];
في ES6+، يمكنك استخدام وظائف الأسهم:

Scores.sort((a, b) => b.score - a.score));
بالنسبة للمتصفحات الأقدم التي لا تتمتع بهذا الدعم:

Scores.sort(function(a, b) ( return a.score - b.score ));
كما ترون، يعد الفرز في JavaScript أمرًا غامضًا إلى حد ما، وآمل أن تجعل هذه الأمثلة الحياة أسهل بطريقة ما.

العمل مع وظائف الطاقة

الأس هو عملية تم تعريفها في الأصل على أنها نتيجة الضرب المتكرر لعدد طبيعي في نفسه؛ الجذر التربيعي لـ 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 هو الإصدار التاليجافا سكريبت، من حيث المبدأ، يمكننا استخدام عامل الأسي الجديد المقترح - * *، قد يكون هذا الشكل من التدوين أكثر وصفيًا:

3 ** 2 > 9
في الوقت الحالي، دعم هذا المشغل محدود للغاية، لذلك لا ينصح باستخدامه.

يمكن أن تكون وظيفة الطاقة مفيدة في مجموعة متنوعة من المواقف. مثال بسيط لحساب عدد الثواني في الساعة: Math.pow (60,2).

الجذور التربيعية والتكعيبية

Math.sqrt() و Math.cbrt() هما عكس Math.pow(). كما نتذكر، الجذر التربيعي لـ a هو الرقم الذي يعطينا عندما يتم تربيعه.

الرياضيات.sqrt(9) > 3
وفي الوقت نفسه، الجذر التكعيبي لـ a هو الرقم الذي يعطي s عند رفعه إلى مكعب.

الرياضيات.cbrt(125) > 5
تم إدخال Math.cbrt() مؤخرًا في مواصفات JavaScript، وبالتالي فهو مدعوم فقط في المتصفحات الحديثة: Chrome 38+ وFirefox وOpera 25+ وSafari 7.1+. ستلاحظ أن Internet Explorer غير موجود في هذه القائمة، ولكنك ستجد ملف polyfill على MDN.

أمثلة

بالطبع يمكننا استخدام قيم غير صحيحة في إحدى هذه الوظائف:

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()، وهي الدالة الأسية للأرقام بشكل عام. ملاحظة: في اللغة الإنجليزية، يتم ترجمة كلمة "الأس" على أنها "الأس"، لذلك من المرجح أن ينطبق هذا على المتحدثين باللغة الإنجليزية، على الرغم من وجود أسماء بديلة للأس، مثل الفهرس، والقوة.

الثوابت الرياضية

أصبح التعامل مع الرياضيات في JavaScript أسهل بفضل عدد من الثوابت المضمنة. هذه الثوابت هي خصائص كائن الرياضيات. تجدر الإشارة إلى أن الثوابت تكتب بأحرف كبيرة، وليس تدوين CamelCase.

يمكن للمستخدمين المسجلين فقط المشاركة في الاستطلاع. ادخل من فضلك.

العلامات:
  • جافا سكريبت
  • الرياضيات
اضف اشارة

مرحبًا عشاق جافا سكريبت. لقد لاحظت بالفعل أن هذه اللغة غير عادية للغاية وتتميز في كل قسم بخصائصها الفريدة وغير العادية الحلول التقنية. لذلك، تم تخصيص منشور اليوم لموضوع: "تقريب جافا سكريبت".

بعد قراءة المقالة الحالية، سوف تتعلم لماذا تحتاج إلى تقريب الأرقام، وما هي الأساليب والخصائص في JS التي تؤدي هذه الوظيفة، وأيضًا لماذا تبرز القسمة على 0. دون تغيير مبادئي، سأرفق أمثلة على ذلك النقاط الرئيسيةالمواد ووصف كل إجراء بالتفصيل. الآن دعونا نبدأ التعلم!

ملاحظات هامة حول الأرقام

أولاً، تذكر أنه في JS، تنتمي جميع أنواع الأرقام (الكسور والأعداد الصحيحة) إلى النوع رقم. بالإضافة إلى ذلك، فهي جميعها 64 بت، حيث يتم تخزينها بتنسيق "الدقة المزدوجة"، المعروف أيضًا باسم معيار IEEE-754.

يتم إنشاء المتغيرات الرقمية بالطريقة المعتادة:

فار خدر = 35؛ // عدد طبيعي

فار دروب = 0.93؛ // التمثيل العشري

فار numb16 = 0xFF; // نظام الأرقام السداسية العشرية

يدعم التمثيلات الرقمية الأخرى. لذلك، يمكنك أيضًا إنشاء أرقام الفاصلة العائمة (وتسمى أحيانًا "الأرقام العلمية").

كان هناك الكثير من الدعم طريقة مثيرة للاهتمام toLocaleString()، والذي يقوم بتنسيق جميع المعلمات الرقمية وفقًا للمواصفات المنصوص عليها في ECMA 402. وبفضل هذا، يتم إنشاء أعداد كبيرة، أرقام الهواتفويتم عرض العملات وحتى النسب المئوية بشكل جميل في مربع الحوار.

فار نوم = 714000.80;

تنبيه (num.toLocaleString ())؛

للعمل مع عناصر من النوع الرقمي، تم توفير كائن عالمي كامل مع مجموعة من العناصر المتنوعة وظائف رياضية، اسم من الرياضيات.

وبصرف النظر عن هذا، هناك طرق أخرى تؤدي التقريب القيم العدديةحتى الأعداد الصحيحة، وحتى الأعشار، والمئات، وما إلى ذلك. دعونا ننظر إليهم جميعا بمزيد من التفصيل.

الرياضيات العظيمة والعظيمة

يتضمن كائن الرياضيات العالمي كمية كبيرةرياضية و مختلفة الدوال المثلثية. هذا جدا الكائن المطلوبوغالبًا ما يساعد المطورين عند العمل مع البيانات الرقمية.

هناك نظائرها للرياضيات على منصات أخرى. على سبيل المثال، في مثل هذا اللغات الشعبيةمثل Java وC#، فإن Math هي فئة تدعم نفس الشيء الميزات القياسية. لذا، كما ترون، هذه الأداة رائعة وقوية حقًا.

الآن أريد أن أستعرض الطرق المحددة المسؤولة عن التقريب وأتحدث عنها بالتفصيل.

الرياضيات. الكلمة ()

سأبدأ مع الرياضيات.أرضية. انتبه إلى اسم الطريقة. منطقيا يصبح واضحا أنه بما أننا نتحدث عن التقريب، والترجمة الحرفية لكلمة "الأرضية" تعني "الأرضية"، إذن هذه الأداةسيتم تقريب القيم المعالجة لأسفل.

ومن الممكن أيضًا أن يظل الرقم الذي تمت معالجته باستخدام هذه الوظيفة كما هو. وذلك لأن التقريب يتم وفقًا لمتباينة غير صارمة (<=). Таким образом, при отработке этой строчки кода:

تنبيه(Math.floor(4.5));

الجواب سيكون رقم 4

الرياضيات.ceil()

انظر مرة أخرى إلى الاسم (بهذه الطريقة يتم امتصاص المادة بشكل أسرع). إذا كان أي شخص لا يعرف، "السقف" تعني "السقف". وهذا يعني أنه سيتم تقريب البيانات الرقمية باستخدام متباينة غير صارمة (>=).

تنبيه(Math.ceil(4.5));

كما كنت قد خمنت، فإن الجواب سيكون الرقم 5.

جولة الرياضيات ()

هذه الطريقة تدور رقم كسريإلى أقرب عدد صحيح. لذلك، إذا كان الجزء الكسري يقع في النطاق من 0 إلى 0.5 غير شامل، فسيتم التقريب إلى قيمة أصغر. وإذا كان الجزء الكسري يقع في النطاق من 0.5 إلى الرقم الصحيح التالي، فسيتم تقريبه إلى رقم صحيح أكبر.

تنبيه(Math.round(4.5));

أتمنى أن الجميع فكر أو قال أن الإجابة الصحيحة هي 5.

عدد قليل من الأساليب

لدى JavaScript أيضًا طريقتان أخريان تتعاملان مع تقريب التمثيلات الرقمية. ومع ذلك، فهي مختلفة بعض الشيء.

سنتحدث عن أدوات مثل للتصليح()و إلى الدقة (). إنهم مسؤولون ليس فقط عن التقريب، ولكن أيضًا عن دقته بالنسبة لأحرف معينة. دعونا نحفر أعمق.

للتصليح()

باستخدام هذه الآليةيمكنك تحديد عدد المنازل العشرية التي يجب تقريب القيمة إليها. تقوم الطريقة بإرجاع النتيجة كسلسلة. لقد أرفقت أدناه خيارًا بثلاثة خيارات مختلفة. تحليل الردود الواردة.

فار نوم = 5656.9393؛

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

document.writeln(num.toFixed(2)); // 5656.94

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

كما ترى، إذا لم تحدد وسيطة، فسوف يقوم toFixed ()) بتقريب القيمة الكسرية على العمومأعداد. يتم تقريب السطر الثالث ما يصل إلى حرفين،وفي الرابع، بسبب المعلمة "7"، تمت إضافة ثلاثة أصفار أخرى.

إلى الدقة ()

تعمل هذه الطريقة بشكل مختلف قليلاً. بدلاً من الوسيطة، يمكنك إما ترك مساحة فارغة أو تعيين معلمة. ومع ذلك، سيقوم الأخير بتقريب الأرقام إلى العدد المحدد من الأرقام، بغض النظر عن الفاصلة. فيما يلي النتائج التي ينتجها البرنامج، معاد كتابتها من المثال السابق:

فار نوم = 5656.9393؛

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

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

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

ميزة القسمة على 0 في Js

كما تعلم من دروس الرياضيات، لا يمكنك القسمة على صفر. تم أخذ هذه القاعدة كأساس من قبل معظم منشئي لغات البرمجة. لذلك، عند القسمة على الصفر، تولد كافة البرامج خطأ.

ومع ذلك، جافا سكريبت تتفوق هنا أيضا. لذلك، أثناء تنفيذ مثل هذه العملية، لا تظهر أي رسائل خطأ... لأن مثل هذه العملية تعود "ما لا نهاية"!

لماذا هو كذلك؟ وكما هو معروف من نفس العلوم الرياضية، كلما صغر المقسوم عليه، كان الناتج أكبر. ولهذا السبب قرر مبتكرو هذه اللغة الموجهة نحو النموذج الأولي التخلي عن القوالب والسير في طريقهم الخاص.

بالنسبة لأولئك الذين يواجهون قيمة Infinity لأول مرة، قمت بشرح ميزاتها أدناه.

اللانهاية - تعني اللانهاية وتتوافق تمامًا علامة رياضية ∞.

قد تكون سلبية. يتم حفظ الجميع أيضًا القواعد القياسيةالعمل مع العوامل الحسابية.

تنبيه(12/0); //ما لا نهاية

تنبيه (12.34/ 0)؛ // ما لا نهاية

تنبيه (-3/ 0)؛ // -ما لا نهاية

أعتقد أنني سأنتهي هنا. إذا أعجبك المنشور، تأكد من الاشتراك في مدونتي. لا تكون الجشع مع وصلة ل مقالات مشوقةومشاركتها مع أصدقائك. وداعا وداعا!

مع أطيب التحيات، رومان تشيشوف

يقرأ: 194 مرة

في هذه المقالة سنتناول بالتفصيل الأرقام والعوامل الرياضية وطرق تحويل الرقم إلى سلسلة والعكس، بالإضافة إلى العديد من النقاط المهمة الأخرى.

دالة غير محدودة

تتيح لك الدالة isFinite التحقق مما إذا كانت الوسيطة عددًا محدودًا.

كإجابة هذه الوظيفةتُرجع false إذا كانت الوسيطة هي Infinity أو -Infinity أو NaN أو سيتم تحويلها إلى إحدى هذه القيم الرقمية الخاصة. وإلا فإن هذه الدالة ستعود صحيحة.

IsFinite(73); // صحيح isFinite(-1/0); // خطأ isFinite(Infinity); // خطأ isFinite(NaN); // خطأ isFinite("نص"); // خطأ شنيع

بالإضافة إلى وظيفة isFinite العامة، تحتوي JavaScript أيضًا على طريقة Number.isFinite. على عكس isFinite، فهو لا يفرض تحويل الوسيطة إلى رقم.

IsFinite("73"); // صحيح Number.isFinite("73"); // خطأ شنيع

دالة isNaN

تم تصميم الدالة isNaN لتحديد ما إذا كانت الوسيطة عبارة عن رقم أو يمكن تحويلها إلى رقم واحد. إذا كان الأمر كذلك، فإن الدالة isNaN ترجع خطأ. وإلا فإنه يعود صحيحا.

IsNaN(NaN); // صحيح isNaN("25px"); // صحيح، لأن 20 بكسل ليس رقمًا isNaN(25.5); //خطأ isNaN("25.5"); //خطأ isNaN(" "); // خطأ، لأن يتم تحويل مسافة أو عدة مسافات إلى 0 isNaN(null); // خطأ، لأن يتم تحويل القيمة الخالية إلى 0 isNaN(true); // خطأ، لأن يتم تحويل true إلى 1 isNaN(false); // خطأ، لأن يتم تحويل الخطأ إلى 0

إذا كان من الضروري تنفيذ هذا الإجراء بدون تحويل النوع، فاستخدم طريقة Number.isNaN. تم تقديم هذه الطريقة في اللغة بدءًا من ECMAScript 6.

كيفية تحويل سلسلة بشكل صريح إلى رقم؟

يمكنك تحويل سلسلة بشكل صريح إلى رقم باستخدام الطرق التالية:

1. استخدم المشغل الأحادي +، والتي يجب وضعها قبل القيمة.

+"7.35"; // 7.35 +"نص"; // نان

تتجاهل هذه الطريقة المسافات في بداية السطر ونهايته، بالإضافة إلى \n (تغذية السطر).

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

استخدام هذه الطريقةفمن الضروري الانتباه إلى حقيقة ذلك خط فارغأو يتم تحويل سلسلة مكونة من مسافات و\n إلى الرقم 0. بالإضافة إلى ذلك، فإنه يحول أيضًا نوع البيانات الفارغة والقيم المنطقية إلى رقم.

باطل؛ //0 +صحيح; //1 +خطأ؛ //0 +" "؛ //0

2. وظيفة ParseInt. تم تصميم هذه الوظيفة للتحويل حجة لعدد صحيح. على عكس استخدام عامل أحادي + , هذه الطريقةيسمح لك بتحويل سلسلة إلى رقم، حيث ليست كل الأحرف رقمية. ويبدأ في تحويل السلسلة، بدءاً من الحرف الأول. وبمجرد أن تواجه حرفًا غير رقمي، تتوقف هذه الدالة عن عملها وترجع الرقم الناتج.

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

يمكن أن تعمل هذه الوظيفة مع أنظمة مختلفةالأرقام (ثنائي، ثماني، عشري، سداسي عشري). يتم تحديد قاعدة نظام الأرقام باستخدام وسيطتين.

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

بالإضافة إلى وظيفة parseInt، تحتوي JavaScript على طريقة Number.parseInt. لا تختلف هذه الطريقة عن وظيفة parseInt وقد تم تقديمها في JavaScript بمواصفات ECMASCRIPT 2015 (6).

3. وظيفة parseFloat. الدالة parseFloat تشبه الدالة parseInt، إلا أنها تسمح لك بتحويل الوسيط إلى رقم كسري.

ParseFloat("33.3%"); //33.3

بالإضافة إلى ذلك، فإن الدالة parseFloat، على عكس parseInt، لا تحتوي على وسيطتين، وبالتالي تحاول دائمًا التعامل مع السلسلة كرقم في النظام العشريالحساب.

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

بالإضافة إلى وظيفة parseFloat، تحتوي JavaScript على طريقة Number.parseFloat. لا تختلف هذه الطريقة عن وظيفة parseFloat وقد تم تقديمها في JavaScript بمواصفات ECMASCRIPT 2015 (6).

تحويل رقم إلى سلسلة

يمكنك تحويل رقم إلى سلسلة باستخدام طريقة toString.

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

يتيح لك التابع toString أيضًا تحديد أساس نظام الأرقام، مع الأخذ في الاعتبار أنك تحتاج إلى تحويل الرقم بشكل صريح إلى سلسلة:

(255).toString(16); //"وما يليها"

كيفية التحقق مما إذا كان المتغير رقمًا

تحديد ما إذا كانت القيمة رقم متغيريمكنك استخدام إحدى الطرق التالية:

1. استخدام الدالتين isNaN وisFinite:

// myVar متغير if (!isNaN(parseFloat(myVar)) && isFinite(parseFloat(myVar))) ( //myVar هو رقم أو يمكن إرساله إليه)؛

كوظيفة:

// الدالة function isNumeric(value) ( ​​​​return !isNaN(parseFloat(value)) && isFinite(parseFloat(value));) // استخدم var myVar = "12px"; console.log(isNumeric(myVar)); //حقيقي

تتيح لك هذه الطريقة تحديد ما إذا كانت القيمة المحددة رقمًا أم يمكن تحويلها إلى رقم. هذا الخيارلا يحسب السلسلة الفارغة، سلسلة المسافات، فارغة، إنفينيتي، -إنفينيتي، صحيح وخطأ كرقم.

2. باستخدام عامل التشغيل typeof والدوال isFinite، isNaN:

// الدالة التي تتحقق مما إذا كانت القيمة عبارة عن رقم function isNumber(value) ( ​​​​نوع الإرجاع للقيمة === "number" && isFinite(value) && !isNaN(value); }; // использование функции isNumber isNumber(18); //true // использование функций для проверки текстовых значений isNumber(parseFloat("")); //false isNumber(parseFloat("Infinity")); //false isNumber(parseFloat("12px")); //true !}

تحدد هذه الوظيفة ما إذا كانت القيمة المحددة من النوع رقم، وكذلك ما إذا كانت تنتمي إلى أحد النوعين معاني خاصةإنفينيتي، -إنفينيتي ونان. إذا كان الأمر كذلك، فإن هذه الدالة ترجع صحيحًا.

3. استخدام طريقة ECMAScript 6 Number.isInteger(value). تتيح لك هذه الطريقة تحديد ما إذا كانت القيمة المحددة عددًا صحيحًا.

Number.isInteger("20"); //خطأ، لأن لا تقوم هذه الطريقة بتحويل سلسلة إلى رقم Number.isInteger(20); // صحيح، لأن قيمة معينةهو رقم

الأعداد الزوجية والفردية

يمكنك التحقق مما إذا كان الرقم زوجيًا أم فرديًا باستخدام الوظائف التالية:

// دالة للتحقق من رقم من أجل دالة تكافؤ زوجي isEven(n) ( return n % 2 == 0; ) // دالة للتحقق من رقم من أجل دالة تكافؤ فردي isOdd(n) ( return Math.abs(n % 2) == 1;)

ولكن قبل إجراء مثل هذا الفحص، من المستحسن التأكد من أن القيمة المحددة هي رقم:

القيمة = 20؛ إذا (Number.isInteger(value)) ( if (isEven(value)) ( console.log("Number " + value.toString() + " - Even"); ) )

الأعداد الأولية في جافا سكريبت

دعونا نلقي نظرة على مثال نشتق فيه باستخدام جافا سكريبت بسيطةالأعداد من 2 إلى 100.

// الدالة التي تتحقق مما إذا كان الرقم أوليًا الدالة isPrime(value) ( ​​​​if (isNaN(value) || !isFinite(value) || value%1 || value< 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 = ; ل(فار ط = 2؛ ط

تقريب رقم في جافا سكريبت

هناك طرق مختلفة لتقريب الكسر إلى رقم صحيح في 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)); //8

2. استخدام طريقة toFixed (الدقة). تعمل هذه الطريقة على تقريب الجزء الكسري من الرقم إلى الدقة المحددة. يتم إرجاع نتيجة التقريب كسلسلة.

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

إذا لم تكن هناك منازل عشرية كافية لتكوين الدقة المحددة للرقم، فسيتم ملؤه بالأصفار.

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

3. استخدام طريقة toPrecision (الدقة). تمثل هذه الطريقة رقمًا بدقة محددة. في الوقت نفسه، يمكنه تقريب ليس فقط الكسور، ولكن أيضا الجزء بأكمله من الرقم. اعتمادا على النتيجة، يمكن لهذه الطريقة تقديم الرقم الناتج بنقطة ثابتة أو في شكل أسي.

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. الاستخدام العوامل المنطقيةليس أو أو.

// عبر النفي المنطقي المزدوج 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 كالرقم الثاني.

Console.log(7.21%1); // 0.20999999999999996 // دقيق حتى رقمين عشريين console.log((7.21%1).toFixed(2)); // "0.21"

بالإضافة إلى ذلك، يمكن أيضًا الحصول على الجزء الكسري باستخدام الحسابات:

رقم المتغير = 7.21؛ var FractionNumber = number - Math.floor(Math.abs(number)); console.log(fractionNumber); // 0.2099999999999996

هل العدد يقبل القسمة على عدد صحيح؟

يمكنك تحديد ما إذا كان الرقم قابلاً للقسمة على عدد صحيح باستخدام عامل النسبة المئوية:

رقم المتغير = 9؛ // إذا كان باقي الرقم مقسومًا على 3 هو 0، فنعم، وإلا لا إذا (number%3==0) ( console.log ("الرقم " + number + " يقبل القسمة على 3"); ) else ( console.log("الرقم " + الرقم + " لا يقبل القسمة على 3"); )

تنسيق الأرقام

في JavaScript، قم بتنسيق إخراج الرقم وفقًا لـ المعايير الإقليمية (اعدادات اللغة نظام التشغيل) يسمح بطريقة toLocaleString().

على سبيل المثال، لنقم بتنسيق رقم وفقًا للمعايير الإقليمية المثبتة في النظام افتراضيًا:

رقم المتغير = 345.46؛ console.log(number.toLocaleString()); //"345.46"

على سبيل المثال، لنقم بتنسيق الرقم وفقًا للمعايير الإقليمية لروسيا (ru):

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

يمكن أيضًا استخدام هذه الطريقة لتنسيق رقم كعملة:

Console.log((2540.125).toLocaleString("ru-RU"،(نمط:"currency"، العملة:"RUB"))); //"2,540.13 ₽" console.log((89.3).toLocaleString("ru-RU"،(style:"currency"، العملة:"USD"))); //"89.30 $" console.log((2301.99).toLocaleString("ru-RU"،(style:"currency"، العملة:"EUR"))); //"2,301.99 يورو"

تمثيل الرقم كنسبة مئوية:

Console.log((0.45).toLocaleString("ru-RU",(style:"percent"))); //"45%"

قم بتقسيم الرقم إلى أرقام (خاصية useGrouping):

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

طباعة رقم س قدر معينالأرقام (2) بعد العلامة العشرية:

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

مقارنة الأرقام

يتم استخدام عوامل التشغيل التالية لمقارنة الأرقام في JavaScript: == (يساوي)، != (غير متساوي)، > (أكبر من)،< (меньше), >= (أكبر من أو يساوي)،<= (меньше или равно).

على سبيل المثال، دعونا نقارن رقمين:

Console.log(2>3); //خطأ console.log(5>=3); //حقيقي

عند مقارنة الأرقام مع الجزء الكسريومن الضروري أن تأخذ في الاعتبار الأخطاء التي قد تحدث أثناء هذه الحسابات.

على سبيل المثال، في JavaScript مجموع الأرقام (0.2 + 0.4) لا يساوي 0.6:

Console.log((0.2+0.4)==0.6); //خطأ شنيع

تحدث الأخطاء لأن جميع الحسابات تتم عن طريق الكمبيوتر أو غيره جهاز الكترونيينتج في نظام رقمين. أولئك. قبل تنفيذ أي إجراء، يجب على الكمبيوتر أولاً تحويل الأرقام المعروضة في التعبير إلى نظام الأرقام الثاني. ولكن لا يمكن تمثيل كل رقم عشري كسري بدقة في نظام الأرقام الثاني.

على سبيل المثال، الرقم 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

ونتيجة لذلك، ستؤثر هذه الأخطاء على حساب مجموع رقمين ونتائج المقارنة. أولئك. اتضح أن هذا حقيقي جافا سكريبتسوف نرى هذا الإدخال على النحو التالي:

0.6000000000000001==0.6

عند حساب أو عرض الأرقام ذات الأجزاء الكسرية، يجب عليك دائمًا الإشارة إلى الدقة التي تريد القيام بذلك بها.

على سبيل المثال، قم بمقارنة الأرقام حتى منزلتين عشريتين باستخدام التابعين toFixed() وtoPrecision():

// طريقة toFixed() console.log((0.2+0.4).toFixed(2)==(0.6).toFixed(2)); //صحيح //طريقة toPrecision() console.log((0.2+0.4).toPrecision(2)==(0.6).toPrecision(2)); //حقيقي

العمليات الحسابية الأساسية

توجد العوامل الرياضية التالية في JavaScript: + (إضافة)، - (طرح)، * (ضرب)، / (قسمة)، % (modulo)، ++ (زيادة قيمة بمقدار 1)، - (تقليل قيمة بمقدار 1).

6+3 //9 6-3 //3 6*3 //18 6/3 //2 6%3 //0، أي. 6:3=2 => 6-3*2 => بقية(0) 5%2 //1، أي. 5:2=2(.5) => 5-2*2 => بقية(1) 7.3%2 //1.3، أي 7.3:2=3(.65) => 7.3-2*3 => Rest(1.3) // علامة نتيجة العملية % تساوي إشارة القيمة الأولى -9%2.5 //-1.5 ، أي. 9:2.5=3(.6) => 9-2.5*3 => راحة(1.5) -9%-2.5 //-1.5، أي. 9:2.5=3(.6) => 9-2.5*3 => بقية(1.5) -2%5 //-2، أي. 2:5=0(.4) => 2-5*0 => الراحة(2) x = 3; console.log(x++); // يخرج 3، ثم يضبط 4 console.log(x); //4 × = 3؛ console.log(++x); // مجموعات 4 والمخرجات س = 5؛ console.log(x--); // يخرج 5، ثم يضبط 4 console.log(x); //4 × = 5؛ console.log(--x); // مجموعات 4 والمخرجات بالإضافة إلى ذلك، تحتوي JavaScript على عوامل تشغيل مجمعة: x+=y (x=x+y)، x-=y (x=x-y)، x*=y (x=x*y)، x/= ص (x=x/y)، x%=y (x=x%y). س = 3؛ ص = 6؛ x+=y; console.log(x); //9 س = 3؛ ص = 6؛ x-=y; console.log(x); //-3 س = 3; ص = 6؛ x*=y; console.log(x); //18 س = 3؛ ص = 6؛ س/=ص; console.log(x); //0.5 س = 3; ص = 6؛ x%=y; console.log(x); //3