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

来源:互联网 发布:java源码分析工具 编辑:程序博客网 时间:2024/04/30 07:02
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");
0 0
原创粉丝点击