• Downloading from our site will require you to have a paid membership. Upgrade to a Premium Membership from 10$ a month today!

    Dont forget read our Rules! Also anyone caught Sharing this content will be banned. By using this site you are agreeing to our rules so read them. Saying I did not know is simply not an excuse! You have been warned.

Hướng dẫn chuyển số sang chữ C#

Admin

Well-Known Member
Staff member
Administrator
Chào các bạn, hôm nay tuoitreit.vn xin hướng dẫn các bạn chuyển số sang chữ trong C#
49816538187_b028b232f6_o.png

Để chuyển số sang chữ bạn viết hàm sau nhé
C#:
private string ChuyenSo(string number)
{
    string[] dv = { "", "mươi", "trăm", "nghìn", "triệu", "tỉ"};
    string[] cs = { "không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín" };
    string doc;
    int i, j, k, n, len, found, ddv, rd;

    len = number.Length;
    number += "ss";
    doc = "";
    found=0;
    ddv=0;
    rd=0;

    i = 0;
    while (i < len)
    {
        //So chu so o hang dang duyet
        n = (len - i + 2) % 3 + 1;

        //Kiem tra so 0
        found = 0;
        for (j = 0; j < n; j++)
        {
            if (number[i + j] != '0')
            {
                found = 1;
                break;
            }
        }

        //Duyet n chu so
        if (found == 1)
        {
            rd = 1;
            for (j = 0; j < n; j++)
            {
                ddv=1;
                switch(number[i+j])
                {
                    case '0':
                        if (n-j==3) doc+=cs[0]+" ";
                        if (n-j==2)
                        {
                            if (number[i+j+1]!='0') doc+="lẻ ";
                            ddv=0;
                        }
                        break;
                    case '1':
                        if (n-j==3) doc+=cs[1] + " ";
                        if (n-j==2)
                        {
                            doc+="mười ";
                            ddv=0;
                        }
                        if (n-j==1)
                        {
                            if (i + j == 0) k = 0;
                            else k = i + j - 1;

                            if (number[k]!='1' && number[k]!='0')
                                doc += "mốt ";
                            else
                                doc+=cs[1]+" ";
                        }
                        break;
                    case '5':
                        if (i+j==len-1)
                            doc+="lăm ";
                        else
                            doc+=cs[5]+" ";
                        break;
                    default:
                        doc+=cs[(int)number[i+j]-48]+" ";
                        break;
                }

                 //Doc don vi nho
                if (ddv==1)
                {
                    doc+=dv[n-j-1]+" ";
                }
            }
        }
     

        //Doc don vi lon
        if (len-i-n>0)
        {
            if ((len - i - n ) % 9 == 0)
            {
                if (rd==1)
                    for (k = 0; k < (len - i - n) / 9; k++)
                        doc += "tỉ ";
                rd=0;
            }
            else
                if (found!=0) doc+=dv[((len-i-n+1)%9)/3+2]+" ";
        }

        i+=n;
    }

    if (len == 1)
        if (number[0] == '0' || number[0] == '5') return cs[(int)number[0] - 48];

    return doc;
}
Gọi hàm bạn sử dụng ChuyenSo(so);
Tham số truyền vào sẽ là string chứa các con số ví dụ so.ToString();
Cách 2:
C#:
string[] mNumText = "không;một;hai;ba;bốn;năm;sáu;bảy;tám;chín".Split(';');
        private string DocHangChuc(double so, bool daydu)
        {
            string chuoi = "";
            //Hàm để lấy số hàng chục ví dụ 21/10 = 2
            Int64 chuc = Convert.ToInt64(Math.Floor((double)(so / 10)));
            //Lấy số hàng đơn vị bằng phép chia 21 % 10 = 1
            Int64 donvi = (Int64)so % 10;
            //Nếu số hàng chục tồn tại tức >=20
            if (chuc > 1)
            {
                chuoi = " " + mNumText[chuc] + " mươi";
                if (donvi == 1)
                {
                    chuoi += " mốt";
                }
            }
            else if (chuc == 1)
            {//Số hàng chục từ 10-19
                chuoi = " mười";
                if (donvi == 1)
                {
                    chuoi += " một";
                }
            }
            else if (daydu && donvi > 0)
            {//Nếu hàng đơn vị khác 0 và có các số hàng trăm ví dụ 101 => thì biến daydu = true => và sẽ đọc một trăm lẻ một
                chuoi = " lẻ";
            }
            if (donvi == 5 && chuc >= 1)
            {//Nếu đơn vị là số 5 và có hàng chục thì chuỗi sẽ là " lăm" chứ không phải là " năm"
                chuoi += " lăm";
            }
            else if (donvi > 1 || (donvi == 1 && chuc == 0))
            {
                chuoi += " " + mNumText[donvi];
            }
            return chuoi;
        }
        private string DocHangTram(double so, bool daydu)
        {
            string chuoi = "";
            //Lấy số hàng trăm ví du 434 / 100 = 4 (hàm Floor sẽ làm tròn số nguyên bé nhất)
            Int64 tram = Convert.ToInt64(Math.Floor((double)so / 100));
            //Lấy phần còn lại của hàng trăm 434 % 100 = 34 (dư 34)
            so = so % 100;
            if (daydu || tram > 0)
            {
                chuoi = " " + mNumText[tram] + " trăm";
                chuoi += DocHangChuc(so, true);
            }
            else
            {
                chuoi = DocHangChuc(so, false);
            }
            return chuoi;
        }
        private string DocHangTrieu(double so, bool daydu)
        {
            string chuoi = "";
            //Lấy số hàng triệu
            Int64 trieu = Convert.ToInt64(Math.Floor((double)so / 1000000));
            //Lấy phần dư sau số hàng triệu ví dụ 2,123,000 => so = 123,000
            so = so % 1000000;
            if (trieu > 0)
            {
                chuoi = DocHangTram(trieu, daydu) + " triệu";
                daydu = true;
            }
            //Lấy số hàng nghìn
            Int64 nghin = Convert.ToInt64(Math.Floor((double)so / 1000));
            //Lấy phần dư sau số hàng nghin
            so = so % 1000;
            if (nghin > 0)
            {
                chuoi += DocHangTram(nghin, daydu) + " nghìn";
                daydu = true;
            }
            if (so > 0)
            {
                chuoi += DocHangTram(so, daydu);
            }
            return chuoi;
        }
        public string ChuyenSoSangChuoi(double so)
        {
            if (so == 0)
                return mNumText[0];
            string chuoi = "", hauto = "";
            Int64 ty;
            do
            {
                //Lấy số hàng tỷ
                ty = Convert.ToInt64(Math.Floor((double)so / 1000000000));
                //Lấy phần dư sau số hàng tỷ
                so = so % 1000000000;
                if (ty > 0)
                {
                    chuoi = DocHangTrieu(so, true) + hauto + chuoi;
                }
                else
                {
                    chuoi = DocHangTrieu(so, false) + hauto + chuoi;
                }
                hauto = " tỷ";
            } while (ty > 0);
            return chuoi + " đồng";
        }
Cách dùng: ChuyenSoSangChuoi(số)
Ví dụ: ChuyenSoSangChuoi(100)
Chúc bạn thành công!
 

Facebook Comments

Similar threads

New posts New threads New resources

Back
Top