سؤال

أثناء العمل في مشروع ما ، صادفت صرف JS الذي أنشأه موظف سابق يقوم بإنشاء تقرير في شكله في شكل

Name : Value
Name2 : Value2

إلخ.

peoblem هي أن القيم يمكن أن تكون في بعض الأحيان تطفو (بدقة مختلفة) ، أعداد صحيحة ، أو حتى في النموذج 2.20011E+17. ما أريد الإخراج هو أعداد صحيحة نقية. لا أعرف الكثير من JavaScript. كيف يمكنني كتابة طريقة تأخذ هذه الغلانات في بعض الأحيان وجعلها أعداد صحيحة؟

هل كانت مفيدة؟

المحلول

لديك لتحويل مدخلاتك إلى رقم ثم حولها:

function toInteger(number){ 
  return Math.round(  // round to nearest integer
    Number(number)    // type cast your input
  ); 
};

أو كبطانة واحدة:

function toInt(n){ return Math.round(Number(n)); };

الاختبار بقيم مختلفة:

toInteger(2.5);           // 3
toInteger(1000);          // 1000
toInteger("12345.12345"); // 12345
toInteger("2.20011E+17"); // 220011000000000000

نصائح أخرى

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

function roundNumber(number, digits) {
            var multiple = Math.pow(10, digits);
            var rndedNum = Math.round(number * multiple) / multiple;
            return rndedNum;
        }

بحسب ال مواصفات ecmascript, ، لا يتم تمثيل الأرقام في JavaScript إلا بتنسيق 64 بت مزدوج 64 بت IEEE 754. وبالتالي لا يوجد نوع عدد صحيح في JavaScript.

فيما يتعلق بتقريب هذه الأرقام ، هناك عدد من الطرق التي يمكنك من خلالها تحقيق ذلك. ال الرياضيات الكائن يعطينا ثلاث طرق تقريب يمكننا استخدام:

ال Math.Round () هو الأكثر استخداما ، فإنه يعيد القيمة المستديرة إلى أقرب عدد صحيح. ثم هناك Math.Floor () يعيد Wich أكبر عدد صحيح أقل من أو يساوي عدد. أخيرًا لدينا Math.ceil () الوظيفة التي تُرجع أصغر عدد صحيح أكبر من أو يساوي رقمًا.

هناك أيضا للتصليح() هذا يعيد سلسلة تمثل الرقم باستخدام تدوين نقطة ثابتة.

ملاحظة: هناك لا الحجة الثانية في ال Math.Round () طريقة. ال للتصليح() هو ليس أي محدد, ، انها داخل مواصفات ECMASCRIPT ASWELL

فيما يلي طريقة لتكون قادرًا على الاستخدام Math.round() مع حجة ثانية (عدد الكسور العشرية للتقريب):

// 'improve' Math.round() to support a second argument
var _round = Math.round;
Math.round = function(number, decimals /* optional, default 0 */)
{
  if (arguments.length == 1)
    return _round(number);

  var multiplier = Math.pow(10, decimals);
  return _round(number * multiplier) / multiplier;
}

// examples
Math.round('123.4567', 2); // => 123.46
Math.round('123.4567');    // => 123

تستطيع ايضا استخذام toFixed(x) أو toPrecision(x) أين x هو عدد الأرقام.

يتم دعم هاتين الطريقتين في جميع المتصفحات الرئيسية

يمكنك استخدام Math.Round () لأرقام التقريب إلى أقرب عدد صحيح.

Math.round(532.24) => 532

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

تقريب جيد جدا للالتقاء:

function Rounding (number, precision){

var newNumber;
var sNumber = number.toString();

var increase = precision + sNumber.length - sNumber.indexOf('.') + 1;

if (number < 0)
  newNumber = (number -  5 * Math.pow(10,-increase));
else
  newNumber = (number +  5 * Math.pow(10,-increase));

var multiple = Math.pow(10,precision);

return Math.round(newNumber * multiple)/multiple;
}

فقط في بعض الحالات عندما يكون طول الجزء العشري من الرقم طويلًا جدًا ، هل سيكون غير صحيح.

Math.Floor (19.5) = 19 يجب أن تعمل أيضًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top