【C#】 將數字轉換為英文金額。

  • 1142
  • 0
  • C#
  • 2020-03-04

將數字轉換成英文金額,支票用。

前些日子同事詢問了能否在Excel上進行數字轉換成英文金額。
如果有這樣的函式,這樣他們列印出報表資料時,可以很方便。不用自己輸入。
原先同事都是利用網路上的轉換器 ,轉換後再貼上。只是這樣比較容易會出錯。
查詢了一下發現 Office Support 有相關的範例跟做法。
完成後,自己想想,未來也有可能在自已的報表上面,也轉換或是顯示相關的資訊,所以紀錄一下。

class NumberToEnglish
    {
        public string Number2English(string nu)
        {
            string dollars = "";
            string cents = "";
            string tp = "";
            string[] temp;
            string[] tx = { "", "Thousand,", "Million,", "Billion,", "Trillion," };

            if (decimal.Parse(nu) == 0) return "Zero Dollars";

            else if (decimal.Parse(nu) <= 0) return "Error!! ";

            else
            { //處理小數點(通常是兩位)
                temp = nu.Split('.');
                string strx = temp[1].ToString();

                string cent = GetEnglish(strx);
                if (!cent.Equals("")) cents = cent + "Cents"; 
            }

            //處理整數部分
            //先將資料格式化,只取出整數
            decimal x = Math.Truncate(decimal.Parse(nu));
            //格式化整數部分
            temp = x.ToString("#,0").Split(',');
            //利用整數,號檢查千、萬、百萬....
            int j = temp.Length -1 ;

            for (int i = 0; i < temp.Length; i++)
            {
                tp =  tp + GetEnglish(temp[i]);
                if (tp != "")
                {
                    tp = tp + tx[j] + " " ;
                }
                else
                {
                    tp = tp + " ";
                }

                j = j - 1;
            }
            if (x == 0 && cents != "") // 如果整數部位= 0 ,且有小數
            {
                dollars = "Zero Dollars And" + cents + " Only";
            }
            else 
            {
                if (cents == "")
                {
                    dollars = tp + "Dollars Only";
                }
                else
                {
                    dollars = tp + "Dollars And" + cents + " Only";
                }
            }
            return dollars;
        }

        private string GetEnglish(string nu)
        {
            string x = "";
            string str1;
            string str2;
            string[] tr = { "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" };
            string[] ty = { "", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };

            //處理百位數
            str1 = tr[int.Parse(nu) / 100] + " Hundred"; //EX  當315除以100 用於int 會取出3 ..對應到字串陣列,就是 Three
            if (str1.Equals(" Hundred")) str1 = ""; //如果結果是空值,表示沒有百分位
            //處理十位數
            int temp = int.Parse(nu) % 100;   //  當315 除100 會剩餘 15 

            if (temp < 20)
            {
                str2 = tr[temp]; //取字串陣列 
            }
            else
            {
                str2 = ty[(temp / 10)].ToString();  //十位數  10/20/30的數量確認 

                if (str2.Equals(""))
                {
                    str2 = tr[(temp % 10)] ;
                }
                else
                {
                    str2 = str2 + "-" + tr[(temp % 10)] ;  //十位數組成
                }

            }
            if (str1 == "" && str2 == "")
            {
                x = "";
            }
            else
            {
                x = str1 + " " + str2 + " " ;
            }

            return x;
        }
    }

 

水滴可成涓流,涓流可成湖泊大海。
汲取累積知識,將知識堆積成常識;將常識探究成學識;將學識簡化為知識;授人自省。