title author date CreateTime categories
C# 金额转中文大写
lindexi
2018-04-29 09:50:38 +0800
2018-04-02 21:42:22 +0800
C#

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

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

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

    public class Money
{
public Money(double money)
{
_money = money;
} private double _money;
}

然后创建方法转换

        public string ToCapital()
{
if (Math.Abs(_money) < 0.0001)
{
return "零元";
} var str = GetIntPart();
GetDecimalPart(str);
return str.ToString();
}

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

然后创建一些使用的数组

        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>()
{
'元',
'拾',
'佰',
'仟',
'万',
'拾',
'佰',
'仟',
'亿',
'拾',
'佰',
'仟',
'万',
'拾',
'佰'
};

转换小数点前的代码

           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 会输出 壹佰零拾零元 ,所以需要对输出转换

        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;
}

转换小数的代码

        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;
}
}

所有代码

<script src='https://gitee.com/lindexi/codes/w6bxlue9o14rv5nscjyhf20/widget_preview?title=Money'></script>

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

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

2018-4-29-C#-金额转中文大写的更多相关文章

  1. 【转载】C#工具类:人民币金额转换为中文大写

    在涉及到金融业务这一块的系统设计中,时常能够遇到的情况是需要将阿拉伯数字的人民币金额自动转换为中文的大写金额.现在互联网上也有很多网站提供此类服务,只要你输入人民币的阿拉伯数字金额,输入后自动给你转换 ...

  2. C# 金额转中文大写

    今天看到一个库是把金额转中文大写,看起来很容易,所以我就自己写了 创建的项目是创建一个 dot net core 的项目,实际上这个项目可以创建为 Stand 的. 首先创建类,这个类的构造传入一个 ...

  3. vue filters 金额转中文大写

    capitalAmount(amount: any) {             // 汉字的数字             const cnNums = ["零", "壹 ...

  4. java数字金额转中文大写

    package com.example.convert; import java.text.DecimalFormat; import java.util.Scanner; /** * 金额转换 * ...

  5. js金额转中文大写

    基础参数: var AIW_number = {0:'零', 1:'壹', 2:'贰', 3:'叁', 4:'肆', 5:'伍', 6:'陆', 7:'柒', 8:'捌', 9:'玖'} var AI ...

  6. XtraReport报表入库单数字转中文大写数字

    先看看打印入库单的效果图,看如下: 客户要求合计一行,要求大写中文数字.XtraReport报表是如何做出以上图的效果呢?因为是要把数字转成大写中文数字,得先准备数字转大写中文数字的函数.因网上有很多 ...

  7. .net 金额中文大写 日期转中文

    金额中文大写 #region 中文大写 /// <summary> /// 返回中文数字 ,如壹佰元整 /// </summary> /// <param name=&q ...

  8. JS把数字金额转换成中文大写数字的函数

    //把数字金额转换成中文大写数字的函数 function num2rmb ($num){ $c1="零壹贰叁肆伍陆柒捌玖"; $c2="分角元拾佰仟万拾佰仟亿" ...

  9. JS实现 阿拉伯数字金额转换为中文大写金额 可以处理负值

    JS实现 阿拉伯数字金额转换为中文大写金额 可以处理负值 //************************* 把数字金额转换成中文大写数字的函数(可处理负值) ****************** ...

随机推荐

  1. 【风马一族_php】

    原文来自:http://www.cnblogs.com/sows/p/6054383.html  (博客园的)风马一族 侵犯版本,后果自负 2016-11-11   15:13:51 回顾 数组:分配 ...

  2. PHP核心编程--文件上传(包含多文件上传)

    一.单文件上传 图片上传界面: <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  3. R语言Switch语句

    R语言Switch语句 switch语句允许一个变量值的列表来平等进行测试.每个值被称为一个条件(情况),变量被接通检查每个条件(情况). 语法 在R语言中创建switch语句的基本语法是: 以下规则 ...

  4. Web.xml详解(转)(Filter,context,listener)

    web.xml 详细解释!!(链接) web.xml加载过程(步骤) 首先简单说一下,web.xml的加载过程. 当我们去启动一个WEB项目时,容器包括(JBoss.Tomcat等)首先会读取项目we ...

  5. NOIP2016提高A组模拟9.28总结

    这次三道题都是可以AC的. 每道题思路都正确,但每道题都有细节没有注意. 第一题 1.没注意系数为1时可以省略系数: 2.没注意在第一项处理常数后,不能输出+号. 导致丢失20分:一定要多出特殊数据, ...

  6. Directx11教程(11) 增加一个debug宏

    原文:Directx11教程(11) 增加一个debug宏       现在我们在common.h中增加一个debug的宏,在每个d3d11函数后调用,如果d3d函数出错,它能够给出程序中错误的代码行 ...

  7. @Transactional注解事务

    打了这个注解的类或者方法表示该类里面的所有方法或者这个方法的事务由spring处理,来保证事务的原子性,即方法里面对数据库操作,如果失败则spring负责回滚操作,成功提交操作 一.特性 1.serv ...

  8. 【JZOJ4819】【NOIP2016提高A组模拟10.15】算循环

    题目描述 输入 输出 样例输入 167 198 样例输出 906462341 数据范围 解法 令f(n)=∑ni=1i,g(n)=∑ni=1i2 易得ans=∑ni=1∑mj=1f(n−i+1)∗f( ...

  9. yum方式安装MySQL【转】

    在CentOS7中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB. 另外至2919年5月4号, 默认安装的my ...

  10. JAVA高级特性--内部类

    内部类概念 public class Outer{ class inner{ } } 特点 可以很好的实现隐藏,可以使用procted,private 可以直接访问外部类的所有成员 ,包括私有成员. ...