使用C#实现阿拉伯数字到大写中文的转换

类别:.NET开发 点击:0 评论:0 推荐:

//Money类

using System;

namespace Money
{
 /// <summary>
 /// 本类实现阿拉伯数字到大写中文的转换
 /// 该类没有对非法数字进行判别
 /// 请调用NumToChn方法
 /// 作者:menway
 /// </summary>
 public class Money
 {
  public Money()
  {
   //
   // TODO: Add constructor logic here
   //
  }
  private char 转换数字(char x)
  {
   string stringChnNames="零一二三四五六七八九";
   string stringNumNames="0123456789";
   return stringChnNames[stringNumNames.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<x.Length;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>
 /// Summary description for Class1.
 /// </summary>
 class MoneyApp
 {
  /// <summary>
  /// The main entry point for the application.
  /// </summary>
  [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));
   }
  }
 }
}

本文地址:http://com.8s8s.com/it/it45646.htm