C# 实现数字转汉字大写

 #region  数字转汉字
        public string NumToChina(string num)
        {
            if (num.IndexOf(".") == -1)//只有整数部分
            {
                if (num.Length > 12)
                    return "";
                else
                    return Part_Int(num);
            }
            else
            {
                if (num.Length > 14)
                    return "";
                else
                    return Part_Int(num.Split('.')[0]) + Part_Decimal(num.Split('.')[1]);
            }
        }
        public string Part_Int(string A)//整数部分处理
        {
            if (string.IsNullOrEmpty(A))
                return "";
            string[] Units = new string[] { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟" };//12个量词
            string A_rev = String.Join("",A.Reverse());
            string tmp= "";
            for (int i = A.Length - 1; i >= 0; i--)
            {
                tmp += DitoCn(A_rev[i], i) + Units[i];//数字转汉字,并加上量词
            }
            return tmp.Replace("零仟", "零").Replace("零佰", "零").Replace("零拾", "零").Replace("零零零#万", "零").Replace("零零零", "零").Replace("零零", "零").Replace("零#", "").Replace("#", "");
        }

        public string Part_Decimal(string B)//小数部分处理
        {
            if (string.IsNullOrEmpty(B))
                return "";
            B = B.TrimEnd('0');
            int lens = B.Length;
            if (lens == 0 || lens > 2)
                return "";

            string tmp = "点";
            for (int i = 0; i < lens; i++)
                tmp += DitoCn(B[i]);
            return tmp;
        }
        public string DitoCn(char cha, int index = -1)//数字转汉字
        {
            string tmp = "";
            switch (cha)
            {
                case '0':
                    if (index == 0 || index == 4 || index == 8)
                        tmp = "#";
                    else
                        tmp = "零";
                    break;
                case '1':
                    tmp = "壹";
                    break;
                case '2':
                    tmp = "贰";
                    break;
                case '3':
                    tmp = "叁";
                    break;
                case '4':
                    tmp = "肆";
                    break;
                case '5':
                    tmp = "伍";
                    break;
                case '6':
                    tmp = "陆";
                    break;
                case '7':
                    tmp = "柒";
                    break;
                case '8':
                    tmp = "捌";
                    break;
                case '9':
                    tmp = "玖";
                    break;
                default:
                    tmp = cha.ToString();
                    break;
            }
            return tmp;
        }

        #endregion

效果如下:

10300234.56  转为:壹仟零叁拾万零贰佰叁拾肆点伍陆

100000001 转为:壹亿零壹

关键解析:

1、每级的“个”位(即0、4、8位),如果为0,都转为#,其他位正常数字转大写,最后使用Replace("#","")将其变为空,解决数末尾有0都不读要求。

2、每级连续有几个0,都只转1个零。

如:全是0情况,100001234,使用Replace("零零零#万", "零");10000,使用Replace("零零零", "零").Replace("零零", "零").Replace("零#", "")

    3个0情况,100051234、 10001,使用Replace("零零零", "零")

    2个0情况,100561234,使用Replace("零零", "零");1001200,使用Replace("零#", "")

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cimusanhuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值