C# cơ bản .NET Core
Phương thức - Method (Bài trước)
(Bài tiếp) Lớp - Class

Dưới đây là phương thức tĩnh code C# có chức năng chuyển số thành chữ, tiện dụng cho các ứng dụng như chuyển số tiền thành chữ cho các ứng dụng như kế toán ...

using System;

namespace XTL
{
  public static class Utils
  {
    /// 
    /// Chuyển phần nguyên của số thành chữ
    /// 
    /// Số double cần chuyển thành chữ
    /// Chuỗi kết quả chuyển từ số
    public static string NumberToText(double inputNumber, bool suffix = true)
    {
        string[] unitNumbers = new string[] { "không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín" };
        string[] placeValues = new string[] { "", "nghìn", "triệu", "tỷ" };
        bool isNegative = false;

        // -12345678.3445435 => "-12345678"
        string sNumber = inputNumber.ToString("#");
        double number = Convert.ToDouble(sNumber);
        if (number < 0)
        {
          number = -number;
          sNumber = number.ToString();
          isNegative = true;
        }


        int ones, tens, hundreds;

        int positionDigit = sNumber.Length;   // last -> first

        string result = " ";


        if (positionDigit == 0)
          result = unitNumbers[0] + result;
        else
        {
          // 0:       ###
          // 1: nghìn ###,###
          // 2: triệu ###,###,###
          // 3: tỷ    ###,###,###,###
          int placeValue = 0;

          while (positionDigit > 0)
          {
            // Check last 3 digits remain ### (hundreds tens ones)
            tens = hundreds = -1;
            ones = Convert.ToInt32(sNumber.Substring(positionDigit - 1, 1));
            positionDigit--;
            if (positionDigit > 0)
            {
              tens = Convert.ToInt32(sNumber.Substring(positionDigit - 1, 1));
              positionDigit--;
              if (positionDigit > 0)
              {
                hundreds = Convert.ToInt32(sNumber.Substring(positionDigit - 1, 1));
                positionDigit--;
              }
            }

            if ((ones > 0) || (tens > 0) || (hundreds > 0) || (placeValue == 3))
              result = placeValues[placeValue] + result;

            placeValue++;
            if (placeValue > 3) placeValue = 1;

            if ((ones == 1) && (tens > 1))
              result = "một " + result;
            else
            {
              if ((ones == 5) && (tens > 0))
                result = "lăm " + result;
              else if (ones > 0)
                result = unitNumbers[ones] + " " + result;
            }
            if (tens < 0)
              break;
            else
            {
              if ((tens == 0) && (ones > 0)) result = "lẻ " + result;
              if (tens == 1) result = "mười " + result;
              if (tens > 1) result = unitNumbers[tens] + " mươi " + result;
            }
            if (hundreds < 0) break;
            else
            {
              if ((hundreds > 0) || (tens > 0) || (ones > 0))
                result = unitNumbers[hundreds] + " trăm " + result;
            }
            result = " " + result;
          }
        }
        result = result.Trim();
        if (isNegative) result = "Âm " + result;
        return result + (suffix ? " đồng chẵn" : "");
      }
  }
}

Sử dụng như sau:

var snumber = XTL.Utils.NumberToText(566776768989);
//năm trăm sáu mươi sáu tỷ bảy trăm bảy mươi sáu triệu bảy trăm sáu mươi tám nghìn chín trăm tám mươi chín đồng chẵn

Code test thử chuyển 1000 số ngẫu nhiên sang chữ C#

// Kiểm tra ngẫu nhiên 1000 số
int ntest = 1000;
Random rn = new Random();
for (int i = 0; i < ntest; i++)
{
    var number = rn.NextDouble() * rn.Next(1, Int32.MaxValue);
    var text = XTL.Utils.NumberToText(number);
    var ntext = number.ToString("###,###,###,###,###");
    Console.WriteLine($"{ntext, 20} --> {text}");
}

Kết quả

     541,981,225 --> năm trăm bốn mươi một triệu chín trăm tám mươi một nghìn hai trăm hai mươi lăm đồng chẵn
     418,968,707 --> bốn trăm mười tám triệu chín trăm sáu mươi tám nghìn bảy trăm lẻ bảy đồng chẵn
     781,809,842 --> bảy trăm tám mươi một triệu tám trăm lẻ chín nghìn tám trăm bốn mươi hai đồng chẵn
     108,892,081 --> một trăm lẻ tám triệu tám trăm chín mươi hai nghìn không trăm tám mươi một đồng chẵn
     878,833,681 --> tám trăm bảy mươi tám triệu tám trăm ba mươi ba nghìn sáu trăm tám mươi một đồng chẵn
   1,498,640,457 --> một tỷ bốn trăm chín mươi tám triệu sáu trăm bốn mươi nghìn bốn trăm năm mươi bảy đồng chẵn
   1,225,616,098 --> một tỷ hai trăm hai mươi lăm triệu sáu trăm mười sáu nghìn không trăm chín mươi tám đồng chẵn
     447,329,627 --> bốn trăm bốn mươi bảy triệu ba trăm hai mươi chín nghìn sáu trăm hai mươi bảy đồng chẵn
      32,568,900 --> ba mươi hai triệu năm trăm sáu mươi tám nghìn chín trăm đồng chẵn
     350,628,963 --> ba trăm năm mươi triệu sáu trăm hai mươi tám nghìn chín trăm sáu mươi ba đồng chẵn
    ...................................

Đăng ký nhận bài viết mới
Phương thức - Method (Bài trước)
(Bài tiếp) Lớp - Class