先記下來,以備後用!
/// <summary> /// 金額轉為大寫金額 /// </summary> public class MoneyConvertChinese { /// <summary> /// 金額轉為大寫金額 /// </summary> /// <param name="LowerMoney"></param> /// <returns></returns> public string MoneyToChinese(string LowerMoney) { string functionReturnValue = null; bool IsNegative = false; // 是否是負數 if (LowerMoney.Trim().Substring(0, 1) == "-") { // 是負數則先轉為正數 LowerMoney = LowerMoney.Trim().Remove(0, 1); IsNegative = true; } string strLower = null; string strUpart = null; string strUpper = null; int iTemp = 0; // 保留兩位小數 123.489→123.49 123.4→123.4 LowerMoney = Math.Round(double.Parse(LowerMoney), 2).ToString(); if (LowerMoney.IndexOf(".") > 0) { if (LowerMoney.IndexOf(".") == LowerMoney.Length - 2) { LowerMoney = LowerMoney + "0"; } } else { LowerMoney = LowerMoney + ".00"; } strLower = LowerMoney; iTemp = 1; strUpper = ""; while (iTemp <= strLower.Length) { switch (strLower.Substring(strLower.Length - iTemp, 1)) { case ".": strUpart = "圓"; break; case "0": strUpart = "零"; break; case "1": strUpart = "壹"; break; case "2": strUpart = "貳"; break; case "3": strUpart = "三"; break; case "4": strUpart = "肆"; break; case "5": strUpart = "伍"; break; case "6": strUpart = "陸"; break; case "7": strUpart = "柒"; break; case "8": strUpart = "捌"; break; case "9": strUpart = "玖"; break; } switch (iTemp) { case 1: strUpart = strUpart + "分"; break; case 2: strUpart = strUpart + "角"; break; case 3: strUpart = strUpart + ""; break; case 4: strUpart = strUpart + ""; break; case 5: strUpart = strUpart + "拾"; break; case 6: strUpart = strUpart + "佰"; break; case 7: strUpart = strUpart + "仟"; break; case 8: strUpart = strUpart + "萬"; break; case 9: strUpart = strUpart + "拾"; break; case 10: strUpart = strUpart + "佰"; break; case 11: strUpart = strUpart + "仟"; break; case 12: strUpart = strUpart + "億"; break; case 13: strUpart = strUpart + "拾"; break; case 14: strUpart = strUpart + "佰"; break; case 15: strUpart = strUpart + "仟"; break; case 16: strUpart = strUpart + "萬"; break; default: strUpart = strUpart + ""; break; } strUpper = strUpart + strUpper; iTemp = iTemp + 1; } strUpper = strUpper.Replace("零拾", "零"); strUpper = strUpper.Replace("零佰", "零"); strUpper = strUpper.Replace("零仟", "零"); strUpper = strUpper.Replace("零零零", "零"); strUpper = strUpper.Replace("零零", "零"); strUpper = strUpper.Replace("零角零分", "整"); strUpper = strUpper.Replace("零分", "整"); strUpper = strUpper.Replace("零角", "零"); strUpper = strUpper.Replace("零億零萬零圓", "億圓"); strUpper = strUpper.Replace("億零萬零圓", "億圓"); strUpper = strUpper.Replace("零億零萬", "億"); strUpper = strUpper.Replace("零萬零圓", "萬圓"); strUpper = strUpper.Replace("零億", "億"); strUpper = strUpper.Replace("零萬", "萬"); strUpper = strUpper.Replace("零圓", "圓"); strUpper = strUpper.Replace("零零", "零"); // 對壹圓以下的金額的處理 if (strUpper.Substring(0, 1) == "圓") { strUpper = strUpper.Substring(1, strUpper.Length - 1); } if (strUpper.Substring(0, 1) == "零") { strUpper = strUpper.Substring(1, strUpper.Length - 1); } if (strUpper.Substring(0, 1) == "角") { strUpper = strUpper.Substring(1, strUpper.Length - 1); } if (strUpper.Substring(0, 1) == "分") { strUpper = strUpper.Substring(1, strUpper.Length - 1); } if (strUpper.Substring(0, 1) == "整") { strUpper = "零圓整"; } functionReturnValue = strUpper; if (IsNegative == true) { return "負" + functionReturnValue; } else { return functionReturnValue; } } }
測試代碼:
static void Main(string[] args) { Console.Write("請輸入要轉成大寫的數字:"); string str = Console.ReadLine(); Console.WriteLine("大寫:" + new MoneyConvertChinese().MoneyToChinese(str)); Console.ReadLine(); }
測試結果:
下面是其它網友的補充:
using System; namespace ConsoleApp { /// <summary> /// 本類實現阿拉伯數字到大寫中文的轉換 /// 該類沒有對非法數字進行判別 /// 請調用NumToChn方法 /// </summary> public class NumFormat { public NumFormat() { // // TODO: 在此處添加構造函數邏輯 // } // 轉換數字 private char ToNum(char x) { string strChnNames="零一二三四五六七八九"; string strNumNames="0123456789"; return strChnNames[strNumNames.IndexOf(x)]; } // 轉換萬以下整數 private string ChangeInt(string x) { string[] strArrayLevelNames=new string[4] {"","十","百","千"}; string ret = ""; int i; for (i=x.Length-1;i>=0;i--) if (x[i] == '0') ret = ToNum(x[i]) + ret; else ret = ToNum(x[i]) + strArrayLevelNames[x.Length-1-i] + ret; while ((i=ret.IndexOf("零零"))!=-1) ret=ret.Remove(i, 1); if (ret[ret.Length-1]=='零' && ret.Length>1) ret=ret.Remove(ret.Length-1,1); if (ret.Length>=2 && ret.Substring(0,2)=="一十") ret=ret.Remove(0,1); return ret; } // 轉換整數 private string ToInt(string x) { int len = x.Length; string ret,temp; if (len<=4) ret = ChangeInt(x); else if (len<=8) { ret = ChangeInt(x.Substring(0,len-4)) + "萬"; temp = ChangeInt(x.Substring(len-4,4)); if (temp.IndexOf("千")==-1 && temp!="") ret += "零" + temp; else ret += temp; } else { ret=ChangeInt(x.Substring(0,len-8)) + "億"; temp=ChangeInt(x.Substring(len-8,4)); if (temp.IndexOf("千")==-1 && temp!="") ret += "零" + temp; else ret += temp; ret += "萬"; temp = ChangeInt(x.Substring(len-4,4)); if (temp.IndexOf("千")==-1 && temp!="") ret += "零" + temp; else ret += temp; } int i; if ((i=ret.IndexOf("零萬"))!=-1) ret = ret.Remove(i+1,1); while ((i=ret.IndexOf("零零"))!=-1) ret = ret.Remove(i,1); if (ret[ret.Length-1]=='零' && ret.Length>1) ret = ret.Remove(ret.Length-1,1); return ret; } private string ToDecimal(string x) { string ret=""; for (int i=0;i<x.Length;i++) ret += ToNum(x[i]); return ret; } public string NumToChn(string x) { if (x.Length==0) return ""; string ret=""; if (x[0]=='-') { ret="負"; x=x.Remove(0,1); } if (x[0].ToString()==".") x="0"+x; if (x[x.Length-1].ToString()==".") x=x.Remove(x.Length-1,1); if (x.IndexOf(".")>-1) ret += ToInt(x.Substring(0,x.IndexOf(".")))+"點"+ToDecimal(x.Substring(x.IndexOf(".")+1)); else ret += ToInt(x); return ret; } } }
測試工程
using System; namespace ConsoleApp { class MainClass { static void Main(string[] args) { /* System.Console.WriteLine("Hello, The World!"); System.Console.WriteLine("My Love!"); ClassTest ct = new ClassTest(); System.Console.WriteLine(ct.Get_Str()); */ /* // 重載運算符 MyVector v1 = new MyVector(5, 12); MyVector v2 = new MyVector(4, 3); MyVector v3 = new MyVector(); v3 = v1 + v2; System.Console.WriteLine("{0}測試一下", v3.Length); */ // 轉換成大寫數字 NumFormat nf = new NumFormat(); string x; while (true) { Console.Write("X="); x = Console.ReadLine(); if (x == "") break; Console.WriteLine("{0}={1}", x, nf.NumToChn(x)); } } } }