人民币大写金额转换C#方法
方法的代码如下:
/// <summary>
/// 人民币大写
/// </summary>
/// <param name="input">待转换输入</param>
/// <param name="prefix">需要添加人民币前缀</param>
/// <exception cref="ArgumentException" />
/// <returns>转换后的结果</returns>
public static string ToCapital(this string input, bool prefix = false) { #region Step1 输入有效性验证 if (!Regex.IsMatch(input, @"(?<=-|^)\d*\.?\d*$"))
throw new ArgumentException("错误的输入金额!"); if (Regex.IsMatch(input, @"^\d{25,}"))
throw new ArgumentException("输入数据太大无法转换!"); #endregion #region Step2 格式化为中间字符串 var positionDic = new Dictionary<int, string> {
{,"F"},{,"J"},{,"."},{,"S"},{,"B"},{,"Q"},{,"W"},{,"SW"},{,"BW"},{,"QW"},
{,"Y"},{,"SY"},{,"BY"},{,"QY"},{,"WY"},{,"SWY"},{,"BWY"},{,"QWY"},{,"YY"},
{,"SYY"},{,"BYY"},{,"QYY"},{,"WYY"},{,"SWYY"},{,"BWYY"},{,"QWYY"}
}; input = Regex.Replace(input, @"^\.", "0."); var integerPart = Regex.Replace(input, @"^-|\..*$", "");
var _matchDecimal = Regex.Match(input, @"\.\d*$", RegexOptions.None);
var decimalPart = Regex.Replace(_matchDecimal.Success ? Convert.ToDouble(_matchDecimal.Value).ToString("0.00") : "", @"0\.", ""); var processStack = new Stack<string>();
var charsArray = (integerPart + decimalPart).Reverse<char>();
for (int i = ; i < charsArray.Count(); i++) {
processStack.Push(string.Format("{0}{1}", charsArray.ElementAt(i), positionDic[i]));
} //符号处理 keleyi.com
if (Regex.IsMatch(input, "^-", RegexOptions.None)) {
processStack.Push("-");
}
if (prefix) {
processStack.Push("¥");
} var process = string.Empty;
while (processStack.Count > ) {
process += processStack.Pop();
}
//语义处理模式队列
Queue<Tuple<string, string, MatchEvaluator>> patterns = new Queue<Tuple<string, string, MatchEvaluator>>();
var patternBuilder = new StringBuilder();
for (int i = ; i < positionDic.Count; i++) {
patternBuilder.AppendFormat("{0}{1}", (i == ? "(0(?:" : "") + positionDic[i], i == positionDic.Count - ? ")+?)+" : "|");
}
patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>(patternBuilder.ToString(), "", null));
patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>(@"(?:\d+(?:QW|BW|SW|W|Q|B|S)?\d?YY)+", null, m => m.Value.Replace("YY", "") + "YY"));
patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>(@"(?:\d+(?:QW|BW|SW|W|Q|B|S)?\d?Y)+", null, m => m.Value.Replace("Y", "") + "Y"));
patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>(@"(?:\d+(?:Q|B|S)?\d?W)+", null, m => m.Value.Replace("W", "") + "W"));
patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>(@"(?!^)0+\.", ".", null));
patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>(@"^0\.0J|^0\.", "", null));
patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>("0J|0F", "", null));
patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>("J0?$", "JZ", null));
patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>(@"\.$|\.0+$", ".Z", null));
patterns.Enqueue(Tuple.Create<string, string, MatchEvaluator>(@"^0+$|^[^.]{0}$", "0.Z", null)); while (patterns.Count > ) {
var pattern = patterns.Dequeue();
if (pattern.Item3 != null) {
process = Regex.Replace(process, pattern.Item1, pattern.Item3);
}
else {
process = Regex.Replace(process, pattern.Item1, pattern.Item2);
}
} #endregion #region Step3 翻译中间字符串
StringBuilder result = new StringBuilder();
var translatorDic = new Dictionary<char, string> {
{'',"零"},{'',"壹"},{'',"贰"},{'',"叁"},{'',"肆"},{'',"伍"},{'',"陆"},{'',"柒"},{'',"捌"},{'',"玖"},
{'S',"拾"},{'B',"佰"},{'Q',"仟"},{'W',"萬"},{'Y',"亿"},
{'¥',"人民币"},{'-',"负"},{'.',"圆"},{'J',"角"},{'F',"分"},{'Z',"整"}
};
for (int i = ; i < process.Length; i++) {
result.Append(translatorDic[process[i]]);
}
#endregion return result.ToString();
}
http://www.cnblogs.com/roucheng/
一个人民币大写的扩展方法。感觉还是有点复杂,请朋友们帮忙优化下或是给个思路。
人民币大写金额转换C#方法的更多相关文章
- C# 人民币大写金额转换
/// <summary> /// 转换人民币大小金额 /// </summary> /// <param name="nu ...
- FastReport调用Delphi中的自定义函数(人民币大写金额)mtm
1. 在 FormCreate 中向FastReprot添加函数 (fPrint)窗口 procedure TfPrint.FormCreate(Sender: TObject); frxReport ...
- C#转换人民币大写金额
/// <summary> /// 转换人民币大写金额. /// </summary> public class RMBConverter { /// <summary& ...
- FastReport调用Delphi中的人民币大写转换自定义函数
FastReport调用Delphi中的人民币大写转换自定义函数 FastReport调用Delphi中的人民币大写转换自定义函数 function TJzpzEdit1.MoneyCn(mmje ...
- Excel 数值转换为人民币大写金额字符串
把$B$27单元格中的数值转换为人民币大写金额字符串: 目标单元格填入以下公式: =IF($B$27=0,CONCATENATE(IF($B$27<=0,,TEXT(INT($B$27),&qu ...
- 微信录音文件上传到服务器以及amr转化成MP3格式,linux上转换简单方法
微信公众号音频接口开发 根据业务需求,我们可能需要将微信录音保存到服务器,而通过微信上传语音接口上传到微信服务器的语音文件的有效期只有3天,所以需要将文件下载到我们自己的服务器. 上传语音接口 wx. ...
- C#中二进制、十进制和十六进制互相转换的方法
二进制在C#中无法直接表示,我们一般用0和1的字符串来表示一个数的二进制形式.比如4的二进制为"100".下面介绍C#里面用于进制转换的方法. 十进制转换为二进制(int--> ...
- jquery对象与dom对象之间互相转换的方法
本文主要讲述jquery对象和js里的dom对象之间互相转换的方法,使jquery对象可以直接使用js里的方法,或js里的dom对象使用jquery里的方法. jquery对象和dom对象是不一样的, ...
- 托管和非托管转换新方法:Marshaling Library(zz) 【转】
托管和非托管转换新方法:Marshaling Library(zz) 托管和非托管转换新方法:Marshaling Library(zz) http://hi.baidu.com/superql/bl ...
随机推荐
- [CoreOS 转载] CoreOS实践指南(六):分布式数据存储Etcd(下)
转载:http://www.csdn.net/article/2015-01-28/2823739/2 摘要:Etcd是CoreOS生态系统中处于连接各个节点通信和支撑集群服务协同运作的核心地位的模块 ...
- Android Screen Orientation Change (Screen Rotation) Example
原文见: http://techblogon.com/android-screen-orientation-change-rotation-example/#
- iOS 自定义滑动切换TabBar
貌似经常会用到,自己整理收藏起来,方便日后查找备用. 效果如图: 由于制作gif,调整了属性,所以看起来的效果不好.如果用默认配置,生成的gif会很大. 制作gif: 1.使用QuickTimePla ...
- iOS开发 - AVPlayer实现流音频边播边存
边播边下有三套左右实现思路,本文使用AVPlayer + AVURLAsset实现. 概述 1. AVPlayer简介 AVPlayer存在于AVFoundation中,可以播放视频和音频,可以理解为 ...
- iis 访问网站需要进行身份验证
今天网站输入域名访问的时候提示需要输入账号密码,这是权限出了问题,百度了一下,解决了,分享一下: 1.登陆远程,右键我的电脑->管理->本地用户和组->用户,里面有一个IUSR_WD ...
- bootstrap fileinput 文件上传工具
这是我上传的第二个plugin 首先第一点就是因为这个好看 符合bootstrap的界面风格 第二是可以拖拽(虽然我不常用这个功能 但是这样界面看起来就丰满了很多) 最后不得不吐槽这个的回发事件 我百 ...
- UNIX环境高级编程笔记之文件I/O
一.总结 在写之前,先唠几句,<UNIX环境高级编程>,简称APUE,这本书简直是本神书,像我这种小白,基本上每看完一章都是“哇”这种很吃惊的表情.其实大概三年前,那会大三,我就买了这本书 ...
- Linux 技巧:让进程在后台可靠运行的几种方法(转)
下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题. nohup/setsid/& 场景: 如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢? ...
- VPN理论简单介绍(转载)
标签:VPN理论简单介绍 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lvnian.blog.51cto.com/715528 ...
- [CS231n-CNN] Convolutional Neural Networks: architectures, convolution / pooling layers
课程主页:http://cs231n.stanford.edu/ 参考: 细说卷积神经网络:http://blog.csdn.net/han_xiaoyang/article/details/ ...