تقنية

formatToParts: نسّق أجزاء العدد دون تخمين مواضع الفواصل

خمسة أجزاء للعدد: صحيح، تجميع، صحيح، فاصل عشري، كسر.
الأجزاء وفق ترتيب المصفوفة في العينة؛ يتكرر النوع integer. [1]

لتمييز كسر عدد منسق، تعامل مع أجزائه المسماة. [1]

تعيد formatToParts أجزاء مرتبة تحمل type وvalue؛ احتفظ بالترتيب عند جمع القيم لبناء نص العدد المنسق. [3]

الخلاصة السريعة

  • حدد اللغة وخيارات التجميع والخانات الكسرية عند إنشاء Intl.NumberFormat. [2]
  • تميّز أنواع الأجزاء بين integer وgroup وdecimal وfraction؛ افحص النوع بدل تخمين موضع الفاصل. [1]
  • جمع قيم الأجزاء بترتيبها الأصلي يعيد النص الذي ينتجه format للعدد نفسه والمنسق نفسه. [3]
  • عدّل الجزء المطلوب بحسب type، واحتفظ ببقية الأجزاء كما هي. [1]

اضبط المنسق أولًا

حدد اللغة وخيارات التجميع والخانات الكسرية عند إنشاء Intl.NumberFormat. [2]

نفّذ المقاطع بالترتيب داخل script في صفحة محلية، ثم افتح وحدة التحكم. تستخدم العينة العدد 12345.6 وتطلب تجميع الخانات وخانتين كسريتين. اختيار الحدين الأدنى والأقصى بالقيمة نفسها يجعل هذا الطلب صريحًا. [2]

المثال هنا لا يعالج نصًا أدخله مستخدم. نبدأ بقيمة عددية جاهزة، ثم نختار طريقة عرضها؛ تغيير اللغة قد يغير الأرقام والفواصل المستخدمة. [2]

مرّر الشيفرة أفقيًا عند الحاجة.

const formatter = new Intl.NumberFormat("ar-EG", {
  useGrouping: true,
  minimumFractionDigits: 2,
  maximumFractionDigits: 2
});
const value = 12345.6;

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

تميّز أنواع الأجزاء بين integer وgroup وdecimal وfraction؛ افحص النوع بدل تخمين موضع الفاصل. [1]

يعرض الجدول كائنًا لكل جزء؛ type يصف وظيفته، وvalue يحمل نصه. في العينة يظهر integer مرتين لأن فاصل التجميع يقع بين مجموعتين من أرقام القسم الصحيح. group للتجميع، وdecimal للفاصل العشري، وfraction للأرقام الكسرية. [1]

لا تفترض أن كل تنسيق يحوي خمسة أجزاء؛ الأنواع تتغير بحسب العدد والخيارات، وقد تظهر إشارات أو نصوص حرفية. [1]

مرّر الشيفرة أفقيًا عند الحاجة.

const parts = formatter.formatToParts(value);
console.table(parts);

تحقق من إعادة الجمع

جمع قيم الأجزاء بترتيبها الأصلي يعيد النص الذي ينتجه format للعدد نفسه والمنسق نفسه. [3]

نجمع value فقط دون فاصل إضافي. تتيح المقارنة التالية التأكد من إعادة بناء النص قبل تزيينه؛ تعطي true في المثال. لا نرتب المصفوفة حسب type، ولا نحذف الأجزاء التي تبدو غير مهمة. [3]

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

مرّر الشيفرة أفقيًا عند الحاجة.

const joined = parts.map(part => part.value).join("");
console.log(joined === formatter.format(value)); // true

ميّز الكسر وحده

عدّل الجزء المطلوب بحسب type، واحتفظ ببقية الأجزاء كما هي. [1]

نضع قوسين مربعين حول الأرقام الكسرية فقط. يظل الفاصل العشري خارج القوسين، وتبقى مجموعات الأعداد في أماكنها. إذا لم يوجد جزء fraction، فلن يضيف هذا الشرط قوسين. [1]

الصورة تعرض أجزاء العينة كما ظهرت في Edge أثناء الاختبار. ويمكن تجربة اللغة en-US بالخيارات نفسها لملاحظة اختلاف الأرقام والفواصل. [2]

مرّر الشيفرة أفقيًا عند الحاجة.

const marked = parts.map(part =>
  part.type === "fraction" ? "[" + part.value + "]" : part.value
).join("");
console.log(marked);

المصادر ومتابعة القراءة

  1. MDN: أنواع أجزاء العدد وتخصيصها (يفتح في نافذة جديدة)developer.mozilla.org
  2. MDN: خيارات منسق الأعداد (يفتح في نافذة جديدة)developer.mozilla.org
  3. ECMA-402: إنشاء أجزاء العدد بالترتيب (يفتح في نافذة جديدة)tc39.es

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