前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C# 金额转中文大写

C# 金额转中文大写

作者头像
林德熙
发布2019-03-12 17:54:02
1.3K0
发布2019-03-12 17:54:02
举报
文章被收录于专栏:林德熙的博客林德熙的博客

今天看到一个库是把金额转中文大写,看起来很容易,所以我就自己写了。

创建的项目是创建一个 dot net core 的项目,实际上这个项目可以创建为 Stand 的。

首先创建类,这个类的构造传入一个 double 作为人民币

代码语言:javascript
复制
    public class Money
    {
        public Money(double money)
        {
            _money = money;
        }

        private double _money;
  }

然后创建方法转换

代码语言:javascript
复制
        public string ToCapital()
        {
            if (Math.Abs(_money) < 0.0001)
            {
                return "零元";
            }

            var str = GetIntPart();
            GetDecimalPart(str);
            return str.ToString();
        }

其中 GetIntPart 是转换小数点前的部分,小数点之后的使用 GetDecimalPart 计算。

然后创建一些使用的数组

代码语言:javascript
复制
        private static readonly List<char> Uppers = new List<char>()
        {
            '零',
            '壹',
            '贰',
            '叁',
            '肆',
            '伍',
            '陆',
            '柒',
            '捌',
            '玖'
        };

        private static readonly List<char> Units = new List<char>()
        {
            '分',
            '角'
        };

        private static readonly List<char> Grees = new List<char>()
        {
            '元',
            '拾',
            '佰',
            '仟',
            '万',
            '拾',
            '佰',
            '仟',
            '亿',
            '拾',
            '佰',
            '仟',
            '万',
            '拾',
            '佰'
        };

转换小数点前的代码

代码语言:javascript
复制
           StringBuilder str = new StringBuilder();
            var money = _money;
        
            for (int i = 0; money > 0.99999; i++)
            {
                var n = (int) (money % 10);
                str.Insert(0,Grees[i]);
                str.Insert(0,Uppers[n]);
                money = money / 10;
                money = money - n / 10.0;
            }

但是这样转换得到的存在一些零,如输入 100 会输出 壹佰零拾零元 ,所以需要对输出转换

代码语言:javascript
复制
        private StringBuilder GetIntPart()
        {
            StringBuilder str = new StringBuilder();
            var money = _money;

            for (int i = 0; money > 0.99999; i++)
            {
                var n = (int) (money % 10);
                str.Insert(0, Grees[i]);
                str.Insert(0, Uppers[n]);
                money = money / 10;
                money = money - n / 10.0;
            }

            str = str.Replace("零亿", "亿零");
            str = str.Replace("零万", "万零");

            str = str.Replace("零拾", "零");
            str = str.Replace("零佰", "零");
            str = str.Replace("零仟", "零");

            str = str.Replace("零零", "零");
            str = str.Replace("零零", "零");

            str = str.Replace("零亿", "亿");
            str = str.Replace("零万", "万");
            str = str.Replace("零元", "元");

            return str;
        }

转换小数的代码

代码语言:javascript
复制
        private void GetDecimalPart(StringBuilder str)
        {
            var money = _money * 100;
            for (int i = 0; i < 2; i++)
            {
                var n = (int) (money % 10);
                if (n != 0)
                {
                    str.Insert(0, Units[i]);
                    str.Insert(0, Uppers[n]);
                }

                money = money / 10;
            }
        }

所有代码

代码请看 https://gitee.com/lindexi/codes/w6bxlue9o14rv5nscjyhf20

参见:src/Money.php · 趋势软件/capital - 码云 Gitee.com

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档