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

menway csdn 2003-5-8

//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));
            }
        }
    }
}
Contributors: FHL