程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> 使用C#實現阿拉伯數字到大寫中文的轉換

使用C#實現阿拉伯數字到大寫中文的轉換

編輯:C#基礎知識

 先記下來,以備後用!

  /// <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));  }  } } } 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved