مقدمة: لماذا الفواصل في الأرقام ليست مجرد جماليات
\n\nتخيل: أنت تعرض راتب موظف على الشاشة — 1500000 روبل. العين تتشتت، الأصفار تتشابك، وتقوم بعد المنازل ثلاث مرات. والآن تخيل 1,500,000 — فهم فوري للمبلغ. الفرق هائل.
على Stack Overflow، سؤال ".NET String.Format() to add commas in thousands place for a number" حصل على عشرات الآلاف من المشاهدات. هذا يعني أن المطورين في جميع أنحاء العالم يتصارعون مع نفس المهمة: كيفية تنسيق رقم بفواصل الآلاف بشكل صحيح وجميل في C#. اليوم سنستعرض جميع الأساليب — من String.Format الكلاسيكي إلى الإمكانيات الحديثة في C#.
إذا كنت تكتب بلغة C# وتعمل مع التقارير أو البيانات المالية أو تريد ببساطة أن تبدو واجهة المستخدم الخاصة بك احترافية — فهذه المقالة لك. هيا بنا!
\n\nما هو String.Format() ولماذا نحتاجه؟
\n\nString.Format() هو أسلوب ثابت يسمح بإدراج قيم المتغيرات في سلسلة نصية قالب مع التحكم في التنسيق. على عكس الربط البسيط، فإنه يوفر مرونة: يمكنك تحديد كيفية عرض الرقم بالضبط — مع فواصل، بعدد ثابت من المنازل العشرية، بتنسيق عملة، وهكذا.
الصيغة بسيطة: String.Format("{0:N}", number)، حيث 0 هو فهرس الوسيطة، و N هو محدد التنسيق. لكن الشيطان، كما هو الحال دائمًا، في التفاصيل.
الطريقة الأساسية: String.Format مع تنسيق "N"
\n\nأبسط وأوضح طريقة لإضافة الفواصل إلى رقم هي استخدام محدد التنسيق "N" (من كلمة Number). يقوم تلقائيًا بإضافة فواصل الآلاف وتحديد عدد المنازل العشرية (افتراضيًا — 2).
int number = 1234567;\nstring formatted = String.Format("{0:N}", number);\nConsole.WriteLine(formatted); // الإخراج: 1,234,567.00\n\n\nإذا كنت لا تحتاج إلى منازل عشرية، استخدم "N0" — الصفر يعني "صفر منازل عشرية":
string formatted = String.Format("{0:N0}", number);\nConsole.WriteLine(formatted); // الإخراج: 1,234,567\n\n\nهام: رمز فاصل الآلاف يعتمد على الثقافة الحالية (CultureInfo). في الإعدادات المحلية الروسية سيكون مسافة (1 234 567)، وفي الإنجليزية فاصلة. إذا كنت بحاجة إلى فاصلة بغض النظر عن الإعدادات الإقليمية، تابع القراءة.
البدائل: ToString("N") ودمج السلاسل النصية
\n\nتقدم C# الحديثة طرقًا أكثر أناقة. بدلاً من String.Format، يمكنك استدعاء الأسلوب ToString مباشرة على الرقم:
string formatted = number.ToString("N0");\nConsole.WriteLine(formatted); // 1,234,567\n\n\nوإذا كنت تستخدم C# 6 أو أحدث، فإن دمج السلاسل النصية سيجعل الكود أكثر قابلية للقراءة:
\n\nstring formatted = $"{number:N0}";\nConsole.WriteLine(formatted); // 1,234,567\n\n\nدمج السلاسل النصية هو في الأساس نفس String.Format، لكنه أكثر متعة من الناحية التركيبية. يتم تجميعه في استدعاء String.Format تحت الغطاء، لذا فإن الأداء متطابق.
الضبط الدقيق: محددات التنسيق المخصصة
\n\nأحيانًا لا يكون التنسيق المدمج "N" كافيًا. على سبيل المثال، قد تحتاج إلى:
- \n
- استخدام مسافة بدلاً من الفاصلة \n
- إظهار علامة "+" للأرقام الموجبة \n
- محاذاة الأرقام حسب العرض \n
لمثل هذه الحالات، توجد سلاسل تنسيق مخصصة. إليك كيفية تعيين فاصل الآلاف يدويًا باستخدام الرمز # أو 0:
int number = 1234567;\nstring customFormat = "#,##0";\nstring formatted = number.ToString(customFormat);\nConsole.WriteLine(formatted); // 1,234,567\n\n\nدعنا نحلل ما يعنيه "#,##0":
- \n
#— رقم اختياري