首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >人民币大写金额转换C#方法

人民币大写金额转换C#方法

作者头像
全栈程序员站长
发布于 2022-07-15 05:55:13
发布于 2022-07-15 05:55:13
80300
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是全栈君

方法的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 /// <summary>
 2 /// 人民币大写
 3 /// </summary>
 4 /// <param name="input">待转换输入</param>
 5 /// <param name="prefix">需要添加人民币前缀</param>
 6 /// <exception cref="ArgumentException" />
 7 /// <returns>转换后的结果</returns>
 8 public static string ToCapital(this string input, bool prefix = false) {
 9 
10     #region Step1 输入有效性验证
11 
12     if (!Regex.IsMatch(input, @"(?<=-|^)\d*\.?\d*$"))
13         throw new ArgumentException("错误的输入金额!");
14 
15     if (Regex.IsMatch(input, @"^\d{25,}"))
16         throw new ArgumentException("输入数据太大无法转换!");
17 
18     #endregion
19 
20     #region Step2 格式化为中间字符串
21 
22     var positionDic = new Dictionary<int, string> {
23         {0,"F"},{1,"J"},{2,"."},{3,"S"},{4,"B"},{5,"Q"},{6,"W"},{7,"SW"},{8,"BW"},{9,"QW"},
24         {10,"Y"},{11,"SY"},{12,"BY"},{13,"QY"},{14,"WY"},{15,"SWY"},{16,"BWY"},{17,"QWY"},{18,"YY"},
25         {19,"SYY"},{20,"BYY"},{21,"QYY"},{22,"WYY"},{23,"SWYY"},{24,"BWYY"},{25,"QWYY"}                
26     };
27 
28     input = Regex.Replace(input, @"^\.", "0.");
29 
30     var integerPart = Regex.Replace(input, @"^-|\..*$", "");
31     var _matchDecimal = Regex.Match(input, @"\.\d*$", RegexOptions.None);
32     var decimalPart = Regex.Replace(_matchDecimal.Success ? Convert.ToDouble(_matchDecimal.Value).ToString("0.00") : "00", @"0\.", "");
33 
34     var processStack = new Stack<string>();
35     var charsArray = (integerPart + decimalPart).Reverse<char>();
36     for (int i = 0; i < charsArray.Count(); i++) {
37         processStack.Push(string.Format("{0}{1}", charsArray.ElementAt(i), positionDic[i]));
38     }
39 
40     //符号处理 keleyi.com
41     if (Regex.IsMatch(input, "^-", RegexOptions.None)) {
42         processStack.Push("-");
43     }
44     if (prefix) {
45         processStack.Push("¥");
46     }
47 
48     var process = string.Empty;
49     while (processStack.Count > 0) {
50         process += processStack.Pop();
51     }
52     //语义处理模式队列
53     Queue<Tuple<string, string, MatchEvaluator>> patterns = new Queue<Tuple<string, string, MatchEvaluator>>();
54     var patternBuilder = new StringBuilder();
55     for (int i = 3; i < positionDic.Count; i++) {
56         patternBuilder.AppendFormat("{0}{1}", (i == 3 ? "(0(?:" : "") + positionDic[i], i == positionDic.Count - 1 ? ")+?)+" : "|");
57     }
58     patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>(patternBuilder.ToString(), "0", null));
59     patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>(@"(?:\d+(?:QW|BW|SW|W|Q|B|S)?\d?YY)+", null, m => m.Value.Replace("YY", "") + "YY"));
60     patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>(@"(?:\d+(?:QW|BW|SW|W|Q|B|S)?\d?Y)+", null, m => m.Value.Replace("Y", "") + "Y"));
61     patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>(@"(?:\d+(?:Q|B|S)?\d?W)+", null, m => m.Value.Replace("W", "") + "W"));
62     patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>(@"(?!^)0+\.", ".", null));
63     patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>(@"^0\.0J|^0\.", "", null));
64     patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>("0J|0F", "0", null));
65     patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>("J0?$", "JZ", null));
66     patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>(@"\.$|\.0+$", ".Z", null));
67     patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>(@"^0+$|^[^.]{0}$", "0.Z", null));
68 
69     while (patterns.Count > 0) {
70         var pattern = patterns.Dequeue();
71         if (pattern.Item3 != null) {
72             process = Regex.Replace(process, pattern.Item1, pattern.Item3);
73         }
74         else {
75             process = Regex.Replace(process, pattern.Item1, pattern.Item2);
76         }
77     }
78 
79     #endregion
80 
81     #region Step3 翻译中间字符串
82     StringBuilder result = new StringBuilder();
83     var translatorDic = new Dictionary<char, string> {
84         {'0',"零"},{'1',"壹"},{'2',"贰"},{'3',"叁"},{'4',"肆"},{'5',"伍"},{'6',"陆"},{'7',"柒"},{'8',"捌"},{'9',"玖"},
85         {'S',"拾"},{'B',"佰"},{'Q',"仟"},{'W',"萬"},{'Y',"亿"},
86         {'¥',"人民币"},{'-',"负"},{'.',"圆"},{'J',"角"},{'F',"分"},{'Z',"整"}
87     };
88     for (int i = 0; i < process.Length; i++) {
89         result.Append(translatorDic[process[i]]);
90     }
91     #endregion
92 
93     return result.ToString();
94 }

http://www.cnblogs.com/roucheng/

一个人民币大写的扩展方法。感觉还是有点复杂,请朋友们帮忙优化下或是给个思路。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/120779.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年12月,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python3 与 C# 基础语法对比(String专栏-新排版)
在线编程:https://mybinder.org/v2/gh/lotapp/BaseCode/master
逸鹏
2018/07/23
1.7K0
Python3 与 C# 基础语法对比(String专栏-新排版)
C# 正则进阶
从 .NET Framework 4.5 开始,正则表达式支持在匹配操作中指定超时时间。如果匹配超时,就会抛出 RegexMatchTimeoutException。
丹枫无迹
2020/02/18
8060
c#常用正则表达式,验证邮箱,Url,电话号码等
正则表达式的一些常用的功能集成至该类中 [C#]代码 public class RegexUtil { private RegexUtil() { } private static RegexUtil instance = null; /// <summary> /// 静态实例化单体模式 /// 保证应用程序操作某一全局对象,让其保持一致而产生的对象 /// </summary> /// <returns></returns> public
大师级码师
2021/10/27
5640
解锁数据完整性新境界:C#中&quot;Parse, Don&#39;t Validate&quot;模式深度实践指南
通过类型系统重构验证逻辑,我们获得: • 100%编译期类型安全保障 • 验证逻辑集中管理 • 业务逻辑纯净度提升300% • 代码重复率降低80%以上 • 运行时异常减少65%
郑子铭
2025/06/11
640
解锁数据完整性新境界:C#中&quot;Parse, Don&#39;t Validate&quot;模式深度实践指南
[Asp.Net Core] 网站中的XSS跨站脚本攻击和防范
漏洞说明: 跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Web脚本代码(html、javascript、css等),当用户浏览该页面时,嵌入其中的Web脚本代码会被执行,从而达到恶意攻击用户的特殊目的。
郑子铭
2023/08/29
3490
[Asp.Net Core] 网站中的XSS跨站脚本攻击和防范
C# 正则表达式大全「建议收藏」
在网上看到一个不错的简易版正则匹配和替换的工具,现在补充进来,感觉还不错,效果如下(输入验证中文汉字的正则表达式)
全栈程序员站长
2022/09/06
1.9K0
C# 正则表达式大全「建议收藏」
正则表达式简介与常用表示
1、正则表达式是用来进行文本处理的技术,是与语言无关的一个正则表达式就是由普通字符以及特殊字符(称为元字符)组成的文字模式
大师级码师
2021/10/29
8960
C# 字符串首字符大写
假如需要把字符串 “red” 转换为 “Red”,把 “red house” 转为 “Red house” 或者单词的第一个大写,下面就是我从网上看到的技术。
林德熙
2018/09/19
1.9K0
C#操作操作类库五(字符串的常用扩展方法)
验证字符串是否由正负号(+-)、数字、小数点构成,并且最多只有一个小数点 验证字符串是否仅由[0-9]构成 验证字符串是否由字母和数字构成 验证是否为空字符串。若无需裁切两端空格,建议直接使用 String.IsNullOrEmpty(string) 裁切字符串(中文按照两个字符计算) 裁切字符串(中文按照两个字符计算,裁切前会先过滤 Html 标签) 过滤HTML标签 获取字符串长度。与string.Length不同的是,该方法将中文作 2 个字符计算。 将形如 10.1MB 格式对用户友好的文件大小字符
跟着阿笨一起玩NET
2018/09/18
8810
解读C#中的正则表达式
 多少年来,许多的编程语言和工具都包含对正则表达式的支持,.NET基础类库中包含有一个名字空间和一系列可以充分发挥规则表达式威力的类,而且它们也都与未来的Perl 5中的规则表达式兼容。   此外,regexp类还能够完成一些其他的功能,例如从右至左的结合模式和表达式的编辑等。   在这篇文章中,我将简要地介绍System.Text.RegularExpression中的类和方法、一些字符串匹配和替换的例子以及组结构的详细情况,最后,还会介绍一些你可能会用到的常见的表达式。 应该掌握的基础知
脑洞的蜂蜜
2018/02/02
1.5K0
Excel催化剂开源第38波-json字符串转多个表格结构
普通人对IT的出品各种系统和各种软件,可畏爱恨交加。好的系统或软件,带来许多重复性工作的效率提升,不好的系统或软件,一天到晚被虐着做一些无聊的数据录入和忍受各种的不完善。
Excel催化剂
2021/08/19
1.1K0
C#正则表达式快速入门
正则表达式(Regular Expression)是一个强大的文本处理工具,主要用于字符串的搜索、替换、验证和分割等操作。通过定义特定的模式,正则表达式可以高效地匹配、查找或替换符合该模式的文本内容。今天大姚将和大家一起来快速了解学习正则表达式,并且在C#中快速应用。
追逐时光者
2024/12/17
1740
C#正则表达式快速入门
C# 结合 JavaScript 对 Web 控件进行数据输入验证
在 Web 应用的录入界面,数据验证是一项重要的实现功能,数据验证是指确认 Web 控件输入或选择的数据,是否满足数据表数据约束,是否满足应用程序所需要数据约束规则。建立数据库约束可以满足数据验证的应用,但在实际的应用中,我们建议还是在更新信息到数据库前,在应用中执行数据验证,这样可减少错误录入,减少应用程序与数据库之间频繁通信造成的服务器压力。通过有效的数据验证,可以确认写入数据表中的数据是有效且符合预期的。本文我们将介绍如何通过C# 后端及JavaScript 前端对 Web 控件进行数据输入有效性的验证。
初九之潜龙勿用
2024/06/20
2920
C# 结合 JavaScript 对 Web 控件进行数据输入验证
.NET下正则表达式应用的四个示例
下面的代码示例使用静态 Regex.IsMatch 方法验证一个字符串是否为有效电子邮件格式。如果字符串包含一个有效的电子邮件地址,则 IsValidEmail 方法返回 true,否则返回 false,但不采取其他任何操作。您可以使用 IsValidEmail,在应用程序将地址存储在数据库中或显示在 ASP.NET 页中之前,筛选出包含无效字符的电子邮件地址。 
Java架构师必看
2021/03/22
1.6K0
C# 正则表达式
最近写爬虫时需要用到正则表达式,有段时间没有使用正则表达式现在渐渐感觉有些淡忘,现在使用还需要去查询一些资料。为了避免以后这样的情况,在此记录下正则表达式的一些基本使用方法附带小的实例。让以后在使用时能一目了然知道他的使用,为开发节约时间,同时也分享给大家。
zls365
2021/03/16
1.7K0
C# 正则表达式
转载:http://www.runoob.com/csharp/csharp-regular-expressions.html 正则表达式 是一种匹配输入文本的模式。.Net 框架提供了允许这种匹配的正则表达式引擎。模式由一个或多个字符、运算符和结构组成。 定义正则表达式 下面列出了用于定义正则表达式的各种类别的字符、运算符和结构。 字符转义 字符类 定位点 分组构造 限定符 反向引用构造 备用构造 替换 杂项构造 字符转义 正则表达式中的反斜杠字符(\)指示其后跟的字符是特殊字符,或应按原义解释该字符。
悟空聊架构
2018/05/18
1.8K0
C#的一些字符表达(一)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
bering
2019/12/03
8440
C#数字转换成大写人民币金额
C#数字转换成大写人民币金额 如200转换成贰佰元 // 数字转换成大写金额 // 例如:(new Money(200)).ToString() == "贰佰元" namespace Skyiv.Util { using System.Text; class Test { static void Main() { for (;;) { System.Console.Write("金额: "); string s = Sys
用户7705674
2021/11/02
1.3K0
C# 使用正则表达式
使用正则匹配: C#中字符串常量以@开头,这样优点是转义序列不被处理,按“原样”输出
王 瑞
2022/12/28
1.4K0
最全的js正则表达式用法大全_js正则表达式语法大全
匹配中文字符的正则表达式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^x00-xff] 评注:可以用来计算字符串的长
全栈程序员站长
2022/11/16
5.3K0
相关推荐
Python3 与 C# 基础语法对比(String专栏-新排版)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档