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

创建的项目是创建一个 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;
}
}

所有代码

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

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

我搭建了自己的博客 https://lindexi.gitee.io/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

C# 金额转中文大写的更多相关文章

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

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

  2. 2018-4-29-C#-金额转中文大写

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

  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. python 使用json格式转换

    什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programm ...

  2. 我的AI之路 —— OCR文字识别快速体验版

    OCR的全称是Optical Character Recoginition,光学字符识别技术.目前应用于各个领域方向,甚至这些应用就在我们的身边,比如身份证的识别.交通路牌的识别.车牌的自动识别等等. ...

  3. POI读写海量Excel

    目前处理Excel的开源javaAPI主要有两种,一是Jxl(JavaExcel API),Jxl只支持Excel2003以下的版本.另外一种是Apache的Jakarta POI,相比于Jxl,PO ...

  4. dubbo实现原理之SPI简介

    dubbo采用微内核+插件体系,设计优雅,扩展性很强.微内核+插件体系是如何实现的呢?想必大家都知道SPI(service provider interface)机制.这种机制的原理是假如我们定义了服 ...

  5. [vuejs] 深入响应式原理

    深入响应式原理 现在是时候深入一下了!Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是普通的 JavaScript 对象.而当你修改它们时,视图会进行更新.这使得状态管理非常简单直接 ...

  6. haproxy监测页面参数简释

    Queue Cur: current queued requests //当前的队列请求数量Max:max queued requests     //最大的队列请求数量Limit:         ...

  7. 修改tomcat默认端口号

    修改tomcat端口号 端口修改tomcat tomcat服务器的默认端口号是8080 1 只启动一个tomcat的情况 当我们不想使用8080端口,需要修改为其他端口时,我们可以: 1, 打开tom ...

  8. Go指南练习 rot13Reader

    题目: 练习:rot13Reader 有种常见的模式是一个 io.Reader 包装另一个 io.Reader,然后通过某种方式修改其数据流. 例如,gzip.NewReader 函数接受一个 io. ...

  9. WebDriver高级应用实例(5)

    5.1对象库(UI Map) 目的:能够使用配置文件存储被测试页面上的元素的定位方式和定位表达式,做到定位数据和程序的分离.方便不具备编码能力的测试人员进行修改和配置. 被测网页的网址: http:/ ...

  10. 利用Warensoft Stock Service编写高频交易软件--DEMO

    利用Warensoft Stock Service编写高频交易软件 无论是哪种交易软件,对于程序员来讲,最麻烦的就是去实现各种算法.本文以SAR算法的实现过程为例,为大家说明如何使用Warensoft ...