1. 程式人生 > >C#實現阿拉伯數字到大寫中文的轉換

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

原文地址:http://www.jb51.net/article/8061.htm

/// <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;

    }

  }

}


測試程式碼:

1

2

3

4

5

6

7

staticvoid Main(string[] args)

{

  Console.Write("請輸入要轉成大寫的數字:");

  string str = Console.ReadLine();

  Console.WriteLine("大寫:" + new MoneyConvertChinese().MoneyToChinese(str));

  Console.ReadLine();

}


String.Trim 方法

返回一個新字串,它相當於從當前 String 物件中移除了一組指定字元的所有前導匹配項和尾隨匹配項。

過載此成員。有關此成員的完整資訊(包括語法、用法和示例),請單擊過載列表中的相應名稱。

從當前 String 物件移除所有前導空白字元和尾部空白字元。

從當前 String 物件移除陣列中指定的一組字元的所有前導匹配項和尾部匹配項。

 if (LowerMoney.Trim().Substring(0, 1) == "-")//判斷第一個符號是否為負號

// 是負數則先轉為正數

      LowerMoney = LowerMoney.Trim().Remove(0, 1);

判斷第一個符號為負號之後,去掉空白之後移除第一個符號。


下面是其它網友的補充:

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)); 

 } 

 } 

}