Math.round()
الدالة 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 |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | نعم | نعم | نعم |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.
- معيار ECMAScript 1st Edition .