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

amyz發表於2007-08-14
使用C#實現阿拉伯數字到大寫中文的轉換 (轉)[@more@]

//Money類

using System;

namespace Money
{
 ///


 /// 本類實現阿拉伯數字到大寫中文的轉換
 /// 該類沒有對數字進行判別
 /// 請NumToChn方法
 /// 作者:menway
 ///

 public class Money
 {
 public Money()
 {
 //
 // TODO: Add constructor logic here
 //
 }
 private char 轉換數字(char x)
 {
 string stringChnNames="零一二三四五六七八九";
 string striumNames="0123456789";
 return stringChnNames[strinmNames.IndexOf(x)];
 }
 private string 轉換萬以下整數(string x)
 {
 string[] stringArrayLevelNames=new string[4] {"","十","百","千"};
 string ret="";
 int i;
 for (i=x.Length-1;i>=0;i--)
 if (x[i]=='0')
 ret=轉換數字(x[i])+ret;
 else
 ret=轉換數字(x[i])+stringArrayLevelNames[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 轉換整數(string x)
 {
 int len=x.Length;
 string ret,temp;
 if (len<=4)
 ret=轉換萬以下整數(x);
 else if (len<=8)
 {
 ret=轉換萬以下整數(x.Substring(0,len-4))+"萬";
 temp=轉換萬以下整數(x.Substring(len-4,4));
 if (temp.IndexOf("千")==-1 && temp!="")
 ret+="零"+temp;
 else
 ret+=temp;
 }
 else
 {
 ret=轉換萬以下整數(x.Substring(0,len-8))+"億";
 temp=轉換萬以下整數(x.Substring(len-8,4));
 if (temp.IndexOf("千")==-1 && temp!="")
 ret+="零"+temp;
 else
 ret+=temp;
 ret+="萬";
 temp=轉換萬以下整數(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 轉換小數(string x)
 {
 string ret="";
 for (int i=0;i ret+=轉換數字(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+=轉換整數(x.Substring(0,x.IndexOf(".")))+"點"+轉換小數(x.Substring(x.IndexOf(".")+1));
 else
 ret+=轉換整數(x);
 return ret;
 }
 }
}

//測試工程

using System;

namespace Money
{
 ///


 /// Summary description for Class1.
 ///

 class MoneyApp
 {
 ///
 /// The main entry point for the application.
 ///

 [STAThread]
 static void Main(string[] args)
 {
 //
 // TODO: Add code to start application here
 //
 Money myMoney=new Money();
 string x;
 while (true)
 {
 Console.Write("X=");
 x=Console.ReadLine();
 if (x=="") break;
 Console.WriteLine("{0}={1}",x,myMoney.NumToChn(x));
 }
 }
 }
}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-956469/,如需轉載,請註明出處,否則將追究法律責任。

相關文章