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

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

مقدمة

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

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

يوضح لك هذا الدرس كيفية تنسيق الأرقام باستخدام الأرقام المعنوية في جافا سكريبت. ستتعلم متى يكون هذا النهج أفضل من التحكم في المنازل العشرية، وكيفية استخدام خيارات 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"
// تم التوسيع للوصول إلى الحد الأدنى وهو 3

console.log(formatter.format(1.234));
// Output: "1.234"
// ضمن النطاق، يتم عرضه كما هو

console.log(formatter.format(1.23456789));
// Output: "1.2346"
// تم التقريب للوصول إلى الحد الأقصى وهو 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"
// خيار الأرقام المعنوية له الأولوية
// يتم تجاهل خيارات الأرقام العشرية

يتم التحكم في هذا السلوك بواسطة خيار 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"

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