كيفية تنسيق الأرقام باستخدام الأرقام المعنوية

التحكم في الأرقام المعروضة والتقريب في الأرقام المنسقة من خلال تحديد الدقة

مقدمة

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

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

يوضح لك هذا الدرس كيفية تنسيق الأرقام باستخدام الأرقام المعنوية في JavaScript. ستتعلم متى يكون هذا النهج أفضل من التحكم في المنازل العشرية، وكيفية استخدام خيارات minimumSignificantDigits وmaximumSignificantDigits مع واجهة برمجة التطبيقات Intl.NumberFormat.

ما هي الأرقام المعنوية

الأرقام المعنوية هي الأرقام في عدد ما التي تشير إلى دقته. يتطلب فهم الأرقام المعنوية اتباع قواعد محددة.

جميع الأرقام غير الصفرية تكون دائماً معنوية. في الرقم 123، جميع الأرقام الثلاثة معنوية. في 45.67، جميع الأرقام الأربعة معنوية.

الأصفار البادئة ليست معنوية أبداً. إنها تشير فقط إلى موضع الفاصلة العشرية. في 0.0045، فقط الرقمان 4 و5 هما أرقام معنوية. الرقم يحتوي على رقمين معنويين، وليس ستة.

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

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

تنسيق الأرقام بحد أقصى من الأرقام ذات الدلالة

يحدد خيار maximumSignificantDigits عدد الأرقام ذات الدلالة التي تظهر في المخرجات المنسقة. هذا الخيار مفيد عندما تريد عرض الأرقام بدقة متسقة بغض النظر عن حجمها.

const formatter = new Intl.NumberFormat("en-US", {
  maximumSignificantDigits: 3,
});

console.log(formatter.format(1.2345));
// Output: "1.23"

console.log(formatter.format(12.345));
// Output: "12.3"

console.log(formatter.format(123.45));
// Output: "123"

console.log(formatter.format(1234.5));
// Output: "1,230"

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

يقبل خيار maximumSignificantDigits قيمًا من 1 إلى 21. القيمة الافتراضية عند عدم تحديد هذا الخيار هي 21، مما يعني فعليًا عدم وجود حد.

const oneDigit = new Intl.NumberFormat("en-US", {
  maximumSignificantDigits: 1,
});

console.log(oneDigit.format(54.33));
// Output: "50"

console.log(oneDigit.format(56.33));
// Output: "60"

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

تنسيق الأرقام بحد أدنى من الأرقام ذات الدلالة

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

const formatter = new Intl.NumberFormat("en-US", {
  minimumSignificantDigits: 5,
});

console.log(formatter.format(1.23));
// Output: "1.2300"

console.log(formatter.format(123));
// Output: "123.00"

console.log(formatter.format(0.0012));
// Output: "0.0012000"

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

يقبل خيار minimumSignificantDigits قيمًا من 1 إلى 21. القيمة الافتراضية هي 1، مما يعني أن الأرقام تعرض دقتها الطبيعية دون إضافة أصفار.

const manyDigits = new Intl.NumberFormat("en-US", {
  minimumSignificantDigits: 10,
});

console.log(manyDigits.format(5));
// Output: "5.000000000"

يضيف المنسق أصفارًا بعد الفاصلة العشرية للوصول إلى الحد الأدنى، أو يضيف أصفارًا قبل الفاصلة العشرية إذا لزم الأمر.

دمج الحد الأدنى والأقصى للأرقام المعنوية

يمكنك تحديد كل من minimumSignificantDigits و maximumSignificantDigits معًا لإنشاء نطاق من الدقة المقبولة. سيعرض المنسق الأرقام ضمن هذا النطاق.

const formatter = new Intl.NumberFormat("en-US", {
  minimumSignificantDigits: 3,
  maximumSignificantDigits: 5,
});

console.log(formatter.format(1.2));
// Output: "1.20"
// Expanded to meet minimum of 3

console.log(formatter.format(1.234));
// Output: "1.234"
// Within range, displayed as-is

console.log(formatter.format(1.23456789));
// Output: "1.2346"
// Rounded to meet maximum of 5

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

try {
  const invalid = new Intl.NumberFormat("en-US", {
    minimumSignificantDigits: 5,
    maximumSignificantDigits: 3,
  });
} catch (error) {
  console.log(error.name);
  // Output: "RangeError"
}

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

كيف تختلف الأرقام المعنوية عن المنازل العشرية

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

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

const decimalPlaces = new Intl.NumberFormat("en-US", {
  minimumFractionDigits: 2,
  maximumFractionDigits: 2,
});

console.log(decimalPlaces.format(1.2));
// Output: "1.20"

console.log(decimalPlaces.format(12.3));
// Output: "12.30"

console.log(decimalPlaces.format(123.4));
// Output: "123.40"

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

const significantDigits = new Intl.NumberFormat("en-US", {
  minimumSignificantDigits: 3,
  maximumSignificantDigits: 3,
});

console.log(significantDigits.format(1.2));
// Output: "1.20"

console.log(significantDigits.format(12.3));
// Output: "12.3"

console.log(significantDigits.format(123.4));
// Output: "123"

لاحظ كيف يُظهر نهج الأرقام المعنوية منازل عشرية أقل مع زيادة حجم الرقم، بينما يُظهر نهج المنازل العشرية نفس عدد المنازل العشرية بغض النظر عن الحجم.

التفاعل مع خيارات أرقام الكسور

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

const formatter = new Intl.NumberFormat("en-US", {
  minimumFractionDigits: 2,
  maximumFractionDigits: 2,
  maximumSignificantDigits: 3,
});

console.log(formatter.format(1234.56));
// Output: "1,230"
// Significant digits option takes precedence
// Fraction digit options are ignored

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

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

متى تستخدم الأرقام المعنوية بدلاً من المنازل العشرية

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

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

const measurement = new Intl.NumberFormat("en-US", {
  maximumSignificantDigits: 4,
});

console.log(measurement.format(0.012345));
// Output: "0.01235"

console.log(measurement.format(1.2345));
// Output: "1.235"

console.log(measurement.format(1234.5));
// Output: "1,235"

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

const metric = new Intl.NumberFormat("en-US", {
  maximumSignificantDigits: 3,
});

console.log(metric.format(1.234));
// Output: "1.23"

console.log(metric.format(123.4));
// Output: "123"

console.log(metric.format(12345));
// Output: "12,300"

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

const currency = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  minimumFractionDigits: 2,
  maximumFractionDigits: 2,
});

console.log(currency.format(1.5));
// Output: "$1.50"

console.log(currency.format(123.5));
// Output: "$123.50"

يعتمد الاختيار بين هذه الأساليب على ما إذا كانت الدقة تتعلق بالعدد الإجمالي للأرقام أو بمكون كسري ثابت.