用于将阿拉伯数字转成中文数字

public class Num2Cn
    {
        #region private Datas
        static readonly string[] cnStr = new string[] { "千", "百", "十", "" };
        static readonly string[] numStr = new string[] { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
        static bool ZeroBefore;
        #endregion

        #region The only public method,if valid,return the result,else return the ErrorMessage
        public static string ConvertToZhCN(string num)
        {
            //init
            ZeroBefore = false;
            ///
            num = filter(num);
            if (!IsValid(num))
                return "输入值不是数字或大于18位";
            return Translate(num, 0);
        }
        #endregion

        #region CheckMethods,just to check if the input is valid or not
        static bool IsValid(string num)
        {
            if (num.Length > 18)
                return false;
            for (int i = 0; i < num.Length; i++)
            {
                if (num[i] < '0' || num[i] > '9')
                    return false;
            }
            return true;
        }
        static string filter(string input)
        {
            for (int i = 0; i < input.Length; i++)
            {
                if (input[i] != '0')
                    return input.Substring(i);
            }
            return "0";
        }
        #endregion

        #region Translation Methods
        static string MapCnStr(char input)
        {
            int x = Convert.ToInt32(input);
            return numStr[x - 48];
        }
        static string Translate(string input, int layer)
        {
            switch (layer)
            {
                case 0:
                    if (input.Length > 4)
                        return Translate(input.Remove(input.Length - 4), layer + 1) +
                            "万" + TranslateUnit(input.Substring(input.Length - 4));
                    else
                        return TranslateUnit(input);
                case 1:
                    if (input.Length > 4)
                        return Translate(input.Remove(input.Length - 4), layer + 1) +
                            "亿" + Translate(input.Substring(input.Length - 4), layer - 1);
                    else
                        return Translate(input, layer - 1);
                case 2:
                    if (input.Length > 8)
                        return Translate(input.Remove(input.Length - 8), layer + 1) +
                            "兆" + Translate(input.Substring(input.Length - 8), layer - 1);
                    else
                        return Translate(input, layer - 1);
                default:
                    return "";
            }
        }
        static string TranslateUnit(string input)
        {
            StringBuilder sb = new StringBuilder();
            int offset = 4 - input.Length;
            for (int i = 0; i < input.Length; i++)
            {
                if (input[i] == '0')
                {
                    if (ZeroBefore)
                        continue;
                    else
                    {
                        ZeroBefore = true;
                        sb.Append(MapCnStr(input[i]));
                    }
                }
                else
                {
                    ZeroBefore = false;

                    sb.Append(MapCnStr(input[i]) + cnStr[i + offset]);
                }
            }
            if (sb[sb.Length - 1] == '零' && sb.Length > 1)
                sb.Remove(sb.Length - 1, 1);

            //edit by lxj 2012-09-25 10,11去掉前面的一,成十,十一
            if (sb.Length >= 2)
            {
                if (sb[0] == '一' && sb[1] == '十')
                {
                    sb.Remove(0, 1);
                }
            }
            return sb.ToString();
        }
        #endregion
    }
调用:Num2Cn.ConvertToZhCN("1");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值