Math.round()‎

من موسوعة حسوب
مراجعة 14:03، 5 ديسمبر 2017 بواسطة عبد اللطيف ايمش (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

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

البنية العامة

Math.round(x)

x

العدد التي ستُجرى عليه العملية.

القيمة المعادة

قيمة العدد مقربةً إلى أقرب عدد صحيح.

الوصف

إذا كان الجزء العشري من العدد أكبر من 0.5 فسيُقرّب إلى العدد الصحيح الذي يملك القيمة المطلقة الأكبر، وإذا كان أقل من 0.5 فسيُقرّب إلى العدد الصحيح الذي يملك القيمة المطلقة الأقل، وإذا كان الجزء العشري يساوي 0.5، فسيُقرّب العدد إلى العدد الصحيح التالي باتجاه زائد لانهاية. لاحظ أنَّ ذلك يختلف عن سلوك العديد من دوال round()‎ في لغات البرمجة الأخرى، والتي تُقرِّب العدد إلى العدد الصحيح الذي يبتعد عن الصفر (مما يعطي نتيجةً مختلفةً في حال استخدام هذه الدالة مع الأعداد السالبة التي يكون الجزء العشري فيها يساوي 0.5).

لمّا كانت الدالة round هي دالةٌ ساكنة (static method) تابعةٌ للكائن Math، فيجب عليك استخدامها دومًا بالشكل Math.round(x)‎، إذ لا تستطيع استخدامها كجزء من كائن Math خاص بك (تذكر أنَّ الكائن Math ليس له دالةٌ بانية).

أمثلة

أمثلة على استخدام الدالة Math.round()‎:

Math.round( 20.49); //  20
Math.round( 20.5);  //  21
Math.round( 42  );  //  42
Math.round(-20.5);  // -20
Math.round(-20.51); // -21

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

لا توجد دالة في JavaScript لتقريب الأعداد العشرية إلى عدد منازل معيّن، لذا يمكن الاستعانة بالشيفرة الآتية التي تُعرِّفها، لمزيدٍ من المعلومات، انظر إلى صفحة الدالة Math.ceil()‎ والدالة Math.floor():

// Closure
(function() {
  /**
   * Decimal adjustment of a number.
   *
   * @param {String}  type  The type of adjustment.
   * @param {Number}  value The number.
   * @param {Integer} exp   The exponent (the 10 logarithm of the adjustment base).
   * @returns {Number} The adjusted value.
   */
  function decimalAdjust(type, value, exp) {
    // If the exp is undefined or zero...
    if (typeof exp === 'undefined' || +exp === 0) {
      return Math[type](value);
    }
    value = +value;
    exp = +exp;
    // If the value is not a number or the exp is not an integer...
    if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
      return NaN;
    }
    // Shift
    value = value.toString().split('e');
    value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
    // Shift back
    value = value.toString().split('e');
    return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
  }

  // Decimal round
  if (!Math.round10) {
    Math.round10 = function(value, exp) {
      return decimalAdjust('round', value, exp);
    };
  }
  // Decimal floor
  if (!Math.floor10) {
    Math.floor10 = function(value, exp) {
      return decimalAdjust('floor', value, exp);
    };
  }
  // Decimal ceil
  if (!Math.ceil10) {
    Math.ceil10 = function(value, exp) {
      return decimalAdjust('ceil', value, exp);
    };
  }
})();

// Round
Math.round10(55.55, -1);   // 55.6
Math.round10(55.549, -1);  // 55.5
Math.round10(55, 1);       // 60
Math.round10(54.9, 1);     // 50
Math.round10(-55.55, -1);  // -55.5
Math.round10(-55.551, -1); // -55.6
Math.round10(-55, 1);      // -50
Math.round10(-55.1, 1);    // -60
// Floor
Math.floor10(55.59, -1);   // 55.5
Math.floor10(59, 1);       // 50
Math.floor10(-55.51, -1);  // -55.6
Math.floor10(-51, 1);      // -60
// Ceil
Math.ceil10(55.51, -1);    // 55.6
Math.ceil10(51, 1);        // 60
Math.ceil10(-55.59, -1);   // -55.5
Math.ceil10(-59, 1);       // -50

دالة تقريب تشبه الدالة الموجودة في PHP

استخدم الشيفرة الآتي لإضافة نسخة جديدة من الدالة Math.round لمجال أسماء خاص بك التي تأخذ معاملًا يُحدِّد الدقة. فعلى النقيض من دالة تقريب الأعداد العشرية السابقة، هذه الدالة لن تحوّل الأعداد من السلاسل النصية، ومعامل الدقة يعمل كما في لغة PHP، أي إذا كانت قيمته هي 1 فسيُقرِّب العدد إلى أقرب منزلة عشرية، وإذا كانت قيمته -1 فسيُقرِّبه إلى العشرات:

var myNamespace = {};

myNamespace.round = function(number, precision) {
    var factor = Math.pow(10, precision);
    var tempNumber = number * factor;
    var roundedTempNumber = Math.round(tempNumber);
    return roundedTempNumber / factor;
};

myNamespace.round(1234.5678, 1); // 1234.6
myNamespace.round(1234.5678, -1); // 1230

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي نعم نعم نعم نعم نعم

مصادر ومواصفات