曾经在N年前,也写过一个阿拉伯数字转大写金额的代码,但那时候对正则还不是很了解,Replace写的一长串一长串,现在用正则后,妥妥的几次Replace搞定,与其它转换代码相比,当然也要有点独特(或者说是画蛇添足)的地方,同时支持简体与繁体,好歹台湾同胞们用的都是繁体不是?当然大写金额国内也认可繁体的说……

代码不多,就一个枚举和一个静态类

枚举ChineseLanguage用于确认要转化成哪种中文

    public enum ChineseLanguage{/// <summary>/// 简体/// </summary>SimplifiedChinese = 0,/// <summary>/// 繁体/// </summary>TraditionalChinese = 1}

ConvertIAmount为静态类,包含一个公开的扩展方法和两个私有的静态方法

    using System.Text;using System.Text.RegularExpressions;public static class ConvertIAmount{/// <summary>/// 中文的单位,不采用兆京等易产生误解的单位/// </summary>private static readonly string[] ChineseNumberUnits = { "万拾佰仟亿", "萬拾佰仟億" };/// <summary>/// 中文的数字/// </summary>private static readonly string[] ChineseNumbers = { "零壹贰叁肆伍陆柒捌玖", "零壹貳叁肆伍陸柒捌玖" };/// <summary>/// RMB计价单位/// </summary>private static readonly string[] RMBUnits = { "圆角分", "圓角分" };/// <summary>/// 将阿拉伯数字转换为中文人民币书写 /// </summary>/// <param name="number">要转换的阿拉伯数字</param>/// <param name="language">要转化为哪种中文,默认简体</param>/// <returns></returns>public static string ConvertChIAmount(this decimal number, ChineseLanguage language = ChineseLanguage.SimplifiedChinese){if (number < 0){throw new Exception("The number you want to change must be greater then zero.");}var integerPartNumber = decimal.ToUInt64(number);//整数部分string integerPart = ConvertIntegerPart(integerPartNumber, language);string decimalPart = ConvertDecimalPart((byte)((number - integerPartNumber) * 100), language);//低于二位的小数直接舍弃,不存在什么进制if (string.IsNullOrEmpty(decimalPart)){//不包含小数时,增加 整 标志return string.Format("{0} 整", integerPart);}else{//组织字符串并移除零圆(零圓)return string.Format("{0} {1}", integerPart, decimalPart).Trim(ChineseNumbers[0][0], RMBUnits[0][0], RMBUnits[1][0]).Trim();}}/// <summary>/// 转化整数部分/// </summary>/// <param name="number">ulong.Max=1844 6744 0737 0955 1615</param>/// <param name="language"></param>/// <returns></returns>private static string ConvertIntegerPart(ulong number, ChineseLanguage language){string numbers = ChineseNumbers[(int)language];string rmbUnits = RMBUnits[(int)language];string numberUnits = ChineseNumberUnits[(int)language];string returnStr;StringBuilder tmp = new StringBuilder();tmp.Append(rmbUnits[0]);//圆(圓)for (var i = 0; ; i++){if (i > 0){if (i % 8 == 0){tmp.Insert(0, numberUnits[4]);//亿(億)}else{tmp.Insert(0, numberUnits[i % 4]);//万(萬)拾佰仟}}var tmpInt = number % 10;tmp.Insert(0, numbers[(int)tmpInt]);number /= 10;if (number == 0) { break; }}string zero = numbers[0].ToString();//将 零[拾佰仟] 替换成 零returnStr = Regex.Replace(tmp.ToString(), string.Format("{0}[{1}{2}{3}]", numbers[0], numberUnits[1], numberUnits[2], numberUnits[3]), zero);//将 零{2,} 替换成 零returnStr = Regex.Replace(returnStr, string.Format("[{0}]{{2,}}", numbers[0]), zero);//将 零(?=[万亿]) 替换成 空格returnStr = Regex.Replace(returnStr, string.Format("{0}(?=[{1}{2}])", numbers[0], numberUnits[0], numberUnits[4]), string.Empty);//将 (?<=[亿])万 替换成 空格returnStr = Regex.Replace(returnStr, string.Format("(?<=[{0}]){1}", numberUnits[4], numberUnits[0]), string.Empty);//将 (?<=[万拾佰仟亿])零(?=圆) 替换成 空格returnStr = Regex.Replace(returnStr, string.Format("(?<=[{0}]){1}(?={2})", numberUnits, numbers[0], rmbUnits[0]), string.Empty);return returnStr;}/// <summary>/// 转化小数部分/// </summary>/// <param name="number"></param>/// <param name="language"></param>/// <returns></returns>private static string ConvertDecimalPart(byte number, ChineseLanguage language){string returnStr = string.Empty;if (number > 0){string numbers = ChineseNumbers[(int)language];string rmbUnits = RMBUnits[(int)language];returnStr = string.Format("{0}{1}{2}{3}", numbers[number / 10], rmbUnits[1], numbers[number % 10], rmbUnits[2]);//将 零[角分] 替换成 空格returnStr = Regex.Replace(returnStr, string.Format("{0}[{1}{2}]", numbers[0], rmbUnits[1], rmbUnits[2]), string.Empty);}return returnStr;}}

下面是测试代码

Console.WriteLine(ConvertIAmount.ConvertChIAmount(10000000100010.01m, ChineseLanguage.TraditionalChinese));//壹拾萬億零壹拾萬零壹拾圓 壹分
Console.WriteLine(ConvertIAmount.ConvertChIAmount(10000000100010.01m));壹拾万亿零壹拾万零壹拾圆 壹分
Console.WriteLine(ConvertIAmount.ConvertChIAmount(12060000100010.01m));//壹拾贰万零陆佰亿零壹拾万零壹拾圆 壹分
Console.WriteLine(ConvertIAmount.ConvertChIAmount(12060000100010.01m, ChineseLanguage.TraditionalChinese));//壹拾貳萬零陸佰億零壹拾萬零壹拾圓 壹分

写完看到一个帖子的29楼(方法里面double要改成decimal,不然在大数字的情况下会精度丢失)我就自卑了

阿拉伯数字转大写金额(支持简体和繁体)相关推荐

  1. 支持 简体,繁体,英文的js日历控件

    1 js文件下载地址 http://download.csdn.net/detail/jianfpeng241241/8293955 2 调用方法 在liferay 的jsp中 <script ...

  2. 页面支持简体和繁体语言的js库

    var Default_isFT = 0 var StranIt_Delay = 50 function StranText(txt, toFT, chgTxt) {if (txt == " ...

  3. Win11怎么改系统语言?Win11系统语言简体改繁体的方法

    Win11怎么改系统语言?有时候我们电脑下载安装系统之后,发现该系统语言不是自己常用的,因此还需要更换系统语言,那么应该如何操作呢?今天小编就为大家带来Win11系统语言简体改繁体的方法,而且用类似的 ...

  4. Opencc简体、繁体转换

    除了写代码进行简体.繁体转换外,opencc也支持命令行进行转换. opencc --help可以看到具体信息. 参数:  -i [file], --input=[file]   从 [file] 读 ...

  5. 字体转换接口实现简体、繁体、火星文之间的转换

    字体转换接口实现简体.繁体.火星文之间的转换 接口名称:字体转换接口 接口平台:api接口 接口地址:http://japi.juhe.cn/charconvert/change.from 支持格式: ...

  6. 使用微软的 Visual Studio International Pack 1.0 进行网站简体与繁体的互转和得到汉字、拼音、笔画等相关信息...

    2009年3月31日,微软发布了 Microsoft Visual Studio International Pack 1.0 SR1.Visual Studio International Pack ...

  7. C# 简体与繁体互转,汉字取拼音、笔画、读音

    先给各位推荐下这个库: 这两个提供这是微软亚洲汉字开发中心开发的,下面是说明: 2009年3月31日,微软发布了 Microsoft Visual Studio International Pack ...

  8. windows使用opencc中文简体和繁体互转 12.8

    转自:https://blog.csdn.net/sinat_29957455/article/details/81290356 OpenCC git项目地址 一.OpenCC介绍 OpenCC是一款 ...

  9. python tkinter 中文文档_Python实现中文文档的简体与繁体互相转换

    封面图片:<Python程序设计实验指导书>,董付国编著,清华大学出版社,2019.4 ============= 本文重点是一个第三方工具的使用,首先从下面的地址下载这两个文件并存放于程 ...

最新文章

  1. 如何破解压缩文件密码-省时省力的方法
  2. Confluence 6 导入 SSL 证书和问题解决
  3. 小程序-云开发部署流程(步骤二)
  4. html语言难不难学,Web前端开发难学吗?
  5. 机器人学习--激光slam简单案例版学习参考(转)
  6. jquery可编辑表格(版本二)
  7. 自由口通信模式下计算机读写PLC存储区的程序
  8. VS中发布并调试IIS程序(非附加进程!!!)
  9. linux的/dev内容介绍
  10. 信息技术处理员和计算机二级,信息处理技术员(信息技术处理员含金量)
  11. 这款开源带采集的漫画cms,宅男的大爱
  12. Java、JSP汽车租赁管理系统
  13. JAVA随机生成中文姓名,性别,Email,手机号,住址
  14. 自律给你自由——Android设计布局的新姿势
  15. 喜大普奔!Maya 2022来了?!
  16. 树莓派开机不加载桌面全屏启动chromium浏览器
  17. hdu 4416 后缀数组
  18. 阿里云Code设置ssh公钥
  19. 图书馆信息管理系统(毕业设计)
  20. mybatis ognl表达式

热门文章

  1. 理解File's ower 和first respond
  2. Java基础12 多态
  3. 报告老板,我们的H5页面在iOS11系统上白屏了!
  4. 0031 练习(猜拳游戏)
  5. 正态性检验ks和sw区别_t检验常见问题汇总解答,你想知道的都在这里
  6. 放眼看政策!2022年武汉市光谷招贤令奖励补贴政策以及申报条件!
  7. 盘点招招毙命的29种USB攻击方式
  8. 光照相关 shader
  9. 分体式降噪耳机哪个好用?入耳式降噪耳机排行榜!
  10. 大恒相机文件配置V1.1