تقريب جافا سكريبت. تحديد رقم في نطاق

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

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.

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

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

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

يقوم الأسلوب Math.round() بتقريب القيمة إلى عدد صحيح.

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

يتم تقريب الأرقام وفقًا للقواعد الرياضية. وهذا هو، إذا كان هناك رقم من 0 إلى 4 بعد العلامة العشرية، فسيتم تجاهل الجزء الكسري ببساطة. وإذا كان بعد العلامة العشرية رقم من 5 إلى 9، فسيتم تجاهل الجزء الكسري، ويضاف واحد إلى الجزء بأكمله. مثال:

جافا سكريبت:

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

بالطبع، 5 - (-2) يساوي 5+2. لا تنس أنك لن تحصل على الرقم 5 في هذه الصيغة. الحد الأقصى سيكون 4.999999999. يمكن تقريب القيم الناتجة إلى الدقة المطلوبة.

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

عدد صحيح = Math.floor(min + Math.random() * (max + 1 - min)

دعونا نطبع الأرقام من 10 إلى 15:

20
21
22
23
24

ل (ط = 1؛ ط<=10; i++) { rand = Math.floor(10 + Math.random() * (15 + 1 - 10)); console.log(rand); }

مقارنة الأعداد الكسرية

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

5.1 < 5.2

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

طرق رياضية أخرى

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

حاول إجراء بعض الحسابات باستخدام هذه الطرق.

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

بعد قراءة المقالة الحالية، سوف تتعلم لماذا من الضروري تقريب الأرقام، وما هي الأساليب والخصائص في 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 مرة