C# - How to Change Number To Word in C# ?

Posted by ေတဇာလင္း Tuesday 20 December 2016 0 comments

မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ VS C# ကိုအသံုးျပဳၿပီး Number(ကိန္းဂဏန္း)ေတြကို Word(စကားလံုး)ေတြအျဖစ္ ဘရ္လို ေျပာင္းလဲယူႏိုင္မလဲ ဆိုတာေလးကို ေလ့လာၾကည့္ၾကပါ့မရ္။ က်ေနာ္ Method ခြဲေရးၿပီး ဆြဲသံုးတဲ့ နည္းလမ္းေလးနဲ႔ပဲ ေရးထားပါတရ္။ စိတ္၀င္စားတဲ့ ညီအစ္ကို၊ ေမာင္ႏွမမ်ား က်ေနာ္နဲ႔အတူ ေလ့လာၾကည့္လိုက္ၾကပါအံုးဗ်ာ။
using System;
using System.Windows.Forms;
namespace NumberToChar
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public string NumberToWords(long number)
        {
            string words = "";
            if (number == 0){   return "သုည";   }
            if (number < 0){   return "အႏုတ္ " + NumberToWords(Math.Abs(number));   }
            
            if ((number / 100000) > 0){
                words += NumberToWords(number / 100000) + "သိန္း၊ ";
                number %= 100000;
            }

            if ((number / 10000) > 0){
                words += NumberToWords(number / 10000) + "ေသာင္း ";
                number %= 10000;
            }

            if ((number / 1000) > 0){
                words += NumberToWords(number / 1000) + "ေထာင္ ";
                number %= 1000;
            }

            if ((number / 100) > 0){
                words += NumberToWords(number / 100) + "ရာ ";
                number %= 100;
            }

            if (number > 0){
                var unitsMap = new[] { "သုည", "တစ္", "ႏွစ္", "သံုး", "ေလး", "ငါး", "ေျခာက္", "ခုႏွစ္", 
"ရွစ္", "ကိုး", "တစ္ဆယ္", "တစ္ဆယ့္တစ္", "တစ္ဆယ့္ႏွစ္", "တစ္ဆယ့္သံုး", "တစ္ဆယ့္ေလး", "တစ္ဆယ့္ငါး", 
"တစ္ဆယ့္ေျခာက္", "တစ္ဆယ့္ခုႏွစ္", "တစ္ဆယ့္ရွစ္", "တစ္ဆယ့္ကိုး" };
                var tensMap = new[] { "သုည", "တစ္ဆယ့္", "ႏွစ္ဆယ့္", "သံုးဆယ့္", "ေလးဆယ့္",
 "ငါးဆယ့္", "ေျခာက္ဆယ့္", "ခုႏွစ္ဆယ့္", "ရွစ္ဆယ့္", "ကိုးဆယ့္" };

                if (number < 20){
                    words += unitsMap[number];
                }else{
                    words += tensMap[number / 10];
                    if ((number % 10) > 0){
                        words += "-" + unitsMap[number % 10];
                    }
                }
            }
            return words;
        }

        private void btnNoToWord_Click(object sender, EventArgs e)
        {            
            txtWord.Text = NumberToWords(long.Parse(txtNumber.Text)) +"က်ပ္";
        }

        private void txtNumber_KeyPress(object sender, KeyPressEventArgs e)
        {
            char ch = e.KeyChar;
            if (!Char.IsDigit(ch) && ch != 8 && ch != 46)
            {
                e.Handled = true;
            }
        }
    }
}
Resutl ကေတာ့ ပံုမွာ ျမင္ေတြ႔ရတဲ့အတုိင္းပါပဲဗ်ာ။ က်ေနာ္တို႔ ေရးထည့္ေပးလိုက္တဲ့ ကိန္းဂဏန္းေတြကို စကားလံုးေတြနဲ႔ ျပန္လည္ေဖာ္ျပေပးမွာျဖစ္ပါတရ္။ Coding မွာ ခက္ခဲတာေတြ မပါ ပါဘူးဗ်ာ။ က်ေနာ္တို႔ Number Conversion ေလ့က်င့္ခန္းေတြတုန္းက ေလ့လာခဲ့တဲ့ ကိန္းစဥ္တန္းတစ္ခုကို မိမိလိုခ်င္သေလာက္ အျပည့္ကိန္းနဲ႔ စား၊ ျဖတ္ထုတ္ၿပီး စာသားခ်ိန္းယူတဲ့ နည္းကို သံုးထားပါတရ္။ တြက္ခ်က္တဲ့အခ်ိန္မွာေတာ့ မိမိ Function ကို Funciton Body အတြင္းမွပဲ ထပ္ခါတလဲလဲ ျပန္ေခၚသံုးတဲ့ Function Recursion နည္းလမ္းကို အသံုးျပဳထားပါတရ္။ TextBox မွာ KeyPress Event ကိုအသံုးျပဳထားတာကေတာ့ က်ေနာ္တို႔ TextBox အတြင္းကို 0-9 digit ေတြနဲ႔ BackSpace Key, Delete Key တို႔ကို သီးသန္႔ အသံုးျပဳႏိုင္ေအာင္လို႔ ျဖည့္စြပ္ထားတာပါ။ မိတ္ေဆြတို႔အေနနဲ႔ မႀကိဳက္ရင္ မသံုးပဲ ေနႏိုင္ပါတရ္။ ဒါဆိုရင္ေတာ့ TextBox အတြင္းကို Number ေတြရိုက္ထည့္တဲ့အခါ သတိထားရမွာျဖစ္ၿပီး အျခားမဆိုင္တဲ့ Character ေတြ ပါလာခဲ့ရင္ေတာ့ Function ကိုျဖတ္တဲ့အခါ အလုပ္ မလုပ္ႏိုင္ပဲ Error ျဖစ္သြားမွာပဲျဖစ္ပါတရ္။
ဒီေလ့က်င့္ခန္းမွာေတာ့ က်ေနာ္ အႏုတ္ Key ရိုက္မရေအာင္ KeyPress Event မွာ ပိတ္ထားပါတရ္။ ဒါေပမဲ့ အေပၚမွာ အႏုတ္ Number ရိုက္ထည့္ရင္လည္း အလုပ္ လုပ္ေၾကာင္း ပံုနဲ႔ ျပထားပါတရ္ဗ်။ မိတ္ေဆြတို႔ အႏုတ္ကိန္းေတြပါ စာသားအျဖစ္ေျပာင္းခ်င္တရ္ဆိုရင္ေတာ့ TextBox_KeyPress Event ကို မသံုးပဲ Off ထားႏိုင္ပါတရ္။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစဗ်ာ။

0 Responses so far.

Post a Comment