如将 1024.67 转换为 壹仟零贰拾肆圆陆角柒分
我写一个程序需要用到.
谢谢!

解决方案 »

  1.   

    // 例如:(new Money(200)).ToString() == "贰佰元"
    namespace Skyiv.Util
    {
      using System.Text;  class Test
      {
        static void Main()
        {
          for (;;)
          {
            System.Console.Write("金额: ");
            string  s = System.Console.ReadLine();
            decimal m;
            try   { m = decimal.Parse(s); }
            catch { break; }
            System.Console.WriteLine("大写: " + new Money(m));
          }
        }
      }  // 该类重载的 ToString() 方法返回的是大写金额字符串
      class Money
      {
        public string Yuan  = "元";                        // “元”,可以改为“圆”、“卢布”之类
        public string Jiao  = "角";                        // “角”,可以改为“拾”
        public string Fen   = "分";                        // “分”,可以改为“美分”之类
        static string Digit = "零壹贰叁肆伍陆柒捌玖";      // 大写数字
        bool   isAllZero    = true;                        // 片段内是否全零
        bool   isPreZero    = true;                        // 低一位数字是否是零
        bool   Overflow     = false;                       // 溢出标志
        long   money100;                                   // 金额*100,即以“分”为单位的金额
        long   value;                                      // money100的绝对值
        StringBuilder sb    = new StringBuilder();         // 大写金额字符串,逆序    // 只读属性: "零元"
        public string ZeroString
        {
          get { return Digit[0] + Yuan; }
        }    // 构造函数
        public Money(decimal money)
        {
          try   { money100 = (long)(money * 100m); }
          catch { Overflow = true; }
          if (money100 == long.MinValue) Overflow = true;
        }    // 重载 ToString() 方法,返回大写金额字符串
        public override string ToString()
        {
          if (Overflow) return "金额超出范围";
          if (money100 == 0) return ZeroString;
          string [] Unit = { Yuan, "万", "亿", "万", "亿亿" };
          value = System.Math.Abs(money100);
          ParseSection(true);
          for (int i = 0; i < Unit.Length && value > 0; i++)
          {
            if (isPreZero && !isAllZero) sb.Append(Digit[0]);
            if (i == 4 && sb.ToString().EndsWith(Unit[2]))
              sb.Remove(sb.Length - Unit[2].Length, Unit[2].Length);
            sb.Append(Unit[i]);
            ParseSection(false);
            if ((i % 2) == 1 && isAllZero)
              sb.Remove(sb.Length - Unit[i].Length, Unit[i].Length);
          }
          if (money100 < 0) sb.Append("负");
          return Reverse();
        }    // 解析“片段”: “角分(2位)”或“万以内的一段(4位)”
        void ParseSection(bool isJiaoFen)
        {
          string [] Unit = isJiaoFen ?
            new string [] { Fen, Jiao } :
            new string [] { "", "拾", "佰", "仟" };
          isAllZero = true;
          for (int i = 0; i < Unit.Length && value > 0; i++)
          {
            int d = (int)(value % 10);
            if (d != 0)
            {
              if (isPreZero && !isAllZero) sb.Append(Digit[0]);
              sb.AppendFormat("{0}{1}", Unit[i], Digit[d]);
              isAllZero = false;
            }
            isPreZero = (d == 0);
            value /= 10;
          }
        }    // 反转字符串
        string Reverse()
        {
          StringBuilder sbReversed = new StringBuilder();
          for (int i = sb.Length - 1; i >= 0; i--)
            sbReversed.Append(sb[i]);
          return sbReversed.ToString();
        }
      }
    }
      

  2.   

    static void Main() 
    {
    Application.Run(new Form1());
    } private void Form1_Load(object sender, System.EventArgs e)
    {
    this.textBox1.Text="12,789,24.01";
    this.textBox2.Text="";
    } private void button1_Click(object sender, System.EventArgs e)
    {
    string s=this.textBox1.Text.Trim();
    s=s.Replace(",","");
    //有无 " ."
    if(s.IndexOf(".")==-1)
    {
    s=s+".00";
    }

    string []a=s.Split('.');
    //存放结果
    char []m=a[0].ToCharArray();
    char []n=a[1].ToCharArray(); string box=dowork(m,n);
    this.textBox2.Text=box+"整";

         }
    private string dowork(char [] s1,char []s2) { string [] R1=new string[]{"仟","佰","拾","元"};//长度为4
    string [] R2=new string[]{"角","分"};//长度为2
    //处理整数部分
    int len=s1.Length;
    int len2=s2.Length; string box="";
    string box1="";
    string box2="";
    string box3="";


    char []a=null;
    char []b=null;
    char []c=null; //是否过亿
    if(len>=9)
    {
    a=new char[len-8];
    b=new char[4];
    c=new char[4];
        Array.Copy(s1,0,a,0,len-8);
       Array.Copy(s1,len-8,b,0,4);
     Array.Copy(s1,len-4,c,0,4);

    a=rep(a,len-8);
    b=rep(b,4);
    c=rep(c,4); } //是否过万
       if(len>=5 &&len<=8)
    {

       b=new char[len-4];
       c=new char[4];
       
       Array.Copy(s1,0,b,0,len-4);
       Array.Copy(s1,len-4,c,0,4);
       b=rep(b,len-4);
       c=rep(c,4);
     
                    
    }
             //在万以内
    if(len<=4)

      c=new char[len];
     Array.Copy(s1,0,c,0,len);
    c=rep(c,len);

    }
    if(c!=null && c.Length>0)
    {
    //加单位
    int j=3;
    for(int i=c.Length-1;i>=0;i--) {
    if(c.Length==1&&c[c.Length-1]=='零')
    {
                            break;
    } if(c[i]!='零')
    {
    box1=c[i].ToString()+R1[j]+box1;

    }
    else
    {
                             box1=R1[j]+box1;
    }
    j--;
    }

    }
    if(b!=null &&b.Length>0)
    {
    //加单位
    int j=3;
    for(int i=b.Length-1;i>=0;i--) {
    if(b[i]!='零')
    {
    if(i==b.Length-1)
    {
                             box2=b[i].ToString()+box2;
    }
    else
    {
    box2=b[i].ToString()+R1[j]+box2;
    }

    }

    j--;
    }
    box2=box2+"万"; }
    if(a!=null && a.Length>0)
    {
    //加单位
    int j=3;
    for(int i=a.Length-1;i>=0;i--) {
    if(a[i]!='零')
    {
    if(i==a.Length-1)
    {
                                   box3=a[i].ToString()+box3;
    }
    else
    {
    box3=a[i].ToString()+R1[j]+box3;
    }

    }
    j--;
    }
    box3=box3+"亿"; }
     

              //处理小数数部分
    //替换数字

    s2=rep(s2,len2);
    string box4="";
    for(int i=0;i<len2;i++) {
    if(i<=1)
    {
    box4=box4 +s2[i].ToString()+R2[i];
    }

    }
                  box=box3+box2+box1+box4;
    return box;
    }//dowork
    private char [] rep(char []s1,int len)
    {
    //替换数字
    for(int i=0;i<len;i++)
    {
    switch(s1[i])
    {
    case '0':
    s1[i]='零';
    break;
    case '1':
    s1[i]='壹';
    break;
    case '2':
    s1[i]='贰';
    break;
    case '3':
    s1[i]='叁';
    break;
    case '4':
    s1[i]='肆';
    break;
    case '5':
    s1[i]='伍';
    break;
    case '6':
    s1[i]='陆';
    break;
    case '7':
    s1[i]='柒';
    break;
    case '8':
    s1[i]='捌';
    break;
    case '9':
    s1[i]='玖';
    break;
               
    } }//for
    return s1;


    }