استخدام فئة التفقيط
في
الموضوع السابق، وضعت لكم كود الفئة NumericToLiteral التي تقوم بتحويل الأعداد من الصيغة الرقمية إلى الصيغة الحرفية..
الكود موجود أيضا داخل ملف المشروع المرفق بهذا الموضوع، ويمكنكم تحميله من هذا
الرابط:
نريد الآن معرفة كيفية التعامل مع الفئة NumericToLiteral.
هذه الفئة تمتلك وسيلة واحدة مشتركة Shared يمكن استدعاؤها من اسم الفئة مباشرة، وهي الوسيلة Convert.. والمثال التالي يريك كيف تحول الرقم 225 إلى تمثيله النصي:
Dim LiteralNo = NumericToLiteral.Convert(225)
MsgBox(LiteralNo)
عند تنفيذ هذا الكود، ستعرض الرسالة النص:
(مئتان وخمسة وعشرون)
ملاحظات:
1- أقصى عدد تتعامل معه هذه الفئة هو 9,223,372,036,854,775,807.. والتمثيل النصي له هو:
(تسعة كوينتيليونات، ومئتان وثلاثة وعشرون كدريليونا، وثلاثمئة واثنان وسبعون تريليونا، وستة وثلاثون مليارا، وثمانمئة وأربعة وخمسون مليونا، وسبعمئة وخمسة وسبعون ألفا، وثمانمئة وسبعة)
حيث إن:
الكوينتيليون = 1000 كدريليون
الكدريليون = 1000 تريليون
تريليون = 1000 مليار
المليار (البليون) = 1000 مليون
وتتعامل هذه الفئة أيضا مع الكسور ومع الأعداد السالبة.. على سبيل المثال، تقول هذه الفئة بتحويل العدد (- 1100.349) إلى:
سالب (ألف، ومئة) و (ثلاثمئة وتسعة وأربعون من ألف)
2- هذه الفئة تكتب التمثيل النصي بين قوسين، لأنه أحيانا يكون طويلا جدا.. كما أن القوسين يجعلان الأمور أوضح عند وضع تمييز بعد العدد.. فمثلا: لو حولت الرقم 273673690 فستحصل على التمثيل الرقمي التالي:
(مئتان وثلاثة وسبعون مليونا، وستمئة وثلاثة وسبعون ألفا، وستمئة وتسعون)
لكن إذا كان القوسان يزعجانك، فيمكنك التخلص منها كالتالي:
LiteralNo = LiteralNo.Replace("(", ""). Replace (")", "")
3- التمثيل النصي للرقم يفترض أن تمييز العدد مذكرا.. لكنك تستطيع تغيير هذا، فالوسيلة Convert لها معامل ثان اختياري، لو أرسلت إليه القيمة True فسيتم اعتبار التمييز مؤنثا، وصياغة العدد على أساس ذلك.. والمثال التالي يوضح الفارق بين تمثيل العدد 15 كمذكر وكمؤنث:
Dim LiteralNo = NumericToLiteral.Convert(15)
MsgBox(LiteralNo)
LiteralNo = NumericToLiteral.Convert(15, True)
MsgBox(LiteralNo)
ستعرض الرسالة الأولى:
(خمسة عشر)
ستعرض الرسالة الثانية:
(خمس عشرة)
4- يمكنك أن ترسل للوسيلة Convert أيضا التمييز الذي تريد استخدامه.. هذا أفضل من أن تحاول كتابته بنفسك، لأن هناك حالا يكون فيها التمييز مفردا، وأخرى يكون فيها جمعا، وحالات يكون فيها منصوبا، وأخرى مجرورا.. لو أرسلته لهذه الوسيلة فستكتبه لك في الصيغة الملائمة للعدد.. ونظرا لأن هذه الفئة لا تتضمن معجما ولا محللا صرفيا، فهي تحتاج منك لذكر التمييز في صيغتي المفرد والجمع، بإرسالهما إلى المعاملين الاختياريين الثالث والرابع على التوالي.. انظر الأمثلة التالية:
Dim LiteralNo = NumericToLiteral.Convert(150, False, "جنيه", "جنيهات")
MsgBox(LiteralNo)
LiteralNo = NumericToLiteral.Convert(105, False, "جنيه", "جنيهات")
MsgBox(LiteralNo)
LiteralNo = NumericToLiteral.Convert(100, False, "جنيه", "جنيهات")
MsgBox(LiteralNo)
ستعرض الرسائل بالترتيب:
(مئة وخمسون) جنيها
(مئة وخمس) جنيهات
(مئة) جنيه
5- إذا أردت إضافة التعبير "فقط لا غير" المستخدم عند تفقيط النقود في الإيصالات، فأضفه في نهاية التمثيل النصي كالتالي:
LiteralNo &= " فقط لا غير"
وقد أنشأت مشروعا اسمه Numbers لتجربة هذه الفئة، ونافذته تبدو كما في الصورة المرفقة.
يمكنكم تحميل هذا المشروع من هذا الرابط:
في هذا المشروع، يمكنكم أن تجربوا ما يلي:
تمييز مذكر: "جنيه" و "جنيهات":
العدد
|
التمثيل النصي
|
1
|
جنيه واحد
|
2
|
جنيهان اثنان
|
3
|
(ثلاثة) جنيهات
|
11
|
(أحد عشر) جنيها
|
99
|
(تسعة وتسعون) جنيها
|
101
|
(مئة وواحد) من الجنيهات
|
102
|
(مئة واثنان) من الجنيهات
|
110
|
(مئة وعشرة) جنيهات
|
187
|
(مئة وسبعة وثمانون) جنيها
|
200
|
(مئتا) جنيه
|
212
|
(مئتان واثنا عشر) جنيها
|
1,200
|
(ألف، ومئتا) جنيه
|
2,370
|
(ألفان، وثلاثمئة وسبعون) جنيها
|
1,001,100
|
(مليون، وألف، ومئة) جنيه
|
976,530,856
|
(تسعمئة وستة وسبعون مليونا، وخمسمئة وثلاثون ألفا، وثمانمئة وستة وخمسون) جنيها
|
2,000,000,000
|
(مليارا) جنيه
|
2,030,500,006
|
(ملياران، وثلاثون مليونا، وخمسمئة ألف، وستة) جنيهات
|
أما لو جربتم نفس الأرقام السابقة مع تمييز مؤنث مثل: "امرأة" و "نساء"، فستحصلون على ما يلي:
العدد
|
التمثيل النصي
|
1
|
امرأة واحدة
|
2
|
امرأتان اثنتان
|
3
|
(ثلاث) نساء
|
11
|
(إحدى عشرة) امرأة
|
99
|
(تسع وتسعون) امرأة
|
101
|
(مئة وواحدة) من النساء
|
102
|
(مئة واثنتان) من النساء
|
110
|
(مئة وعشر) نساء
|
187
|
(مئة وسبع وثمانون) امرأة
|
200
|
(مئتا) امرأة
|
212
|
(مئتان واثنتا عشرة) امرأة
|
1,200
|
(ألف، ومئتا) امرأة
|
2,370
|
(ألفان، وثلاثمئة وسبعون) امرأة
|
1,001,100
|
(مليون، وألف، ومئة) امرأة
|
976,530,856
|
(تسعمئة وستة وسبعون مليونا، وخمسمئة وثلاثون ألفا، وثمانمئة وست وخمسون) امرأة
|
2,000,000,000
|
(مليارا) امرأة
|
2,030,500,006
|
(ملياران، وثلاثون مليونا، وخمسمئة ألف، وست) نساء
|
على فكرة: يمكن استخدام هذا البرنامج كبرنامج تعليمي للتلاميذ الذين يدرسون تمييز العدد في مناهج اللغة العربية :)
شكراً أخي الفاضل
ردحذفوجزاك الله كل خير
جزاك الله خيرا أخ طارق..
ردحذفتحياتي
الف شكر ربنا يوفقك
ردحذفمدونة رائعة جدا
الله يرحم والديك ان شاء الله ويجازيك كل خير ويفتحها عليك دنيا واخرة
ردحذفيرجى توفير كود الجافاسكريبت الأساسي و شكراً
ردحذفابداع
ردحذفالسلام عليكم
ردحذفمجهود رائع
لكن يوجد مشكلة عند كتابة رقم اقل من الجنيه مثلا جرب "101.50"
جوزيت خيراً عمل رائع
ردحذفتقبل الله منك هذا العمل وجعله في ميزان حسناتك واثابك به اجرا وغفرانا لك ولوالدك عليه رحمة الله
ردحذفشرح رائع ولكن يوجد مشكلة لما نكتب رقم أقل من الجنيه !!!
ردحذفأشكرك.
حذفلا توجد أي مشاكل.. البرنامج مصمم للتعامل مع الأعداد بصفة عامة وليس النقود فقط.. لو كتبت 0.1 فسيحولها البرنامج إلى واحد من عشرة، ولو كتبت 0.70 فسيحولها إلى 70 من مئة، وهذا هو التمثيل الصحيح.. إذا أردت أن تجعل الأمور أوضح مع النقود، فاكتب شرطا للتعامل مع الكسور العشرية (خذ خانتين من الكسر) لتحويلها في خطوة مستقلة مع استخدام التمييز (قرش/قروش).. هذا سيحول المثالين السابقين إلى 10 قروش و 70 قرشا على التوالي.. يمكنك استخدام هذه الفئة بطرق مختلفة للوصول إلى النتيجة التي تريحك.
مشكور ...
ردحذف