代码如下:
///<summary>
///人民币大写
///</summary>
///<paramname=”input”>待转换输入</param>
///<paramname=”prefix”>需要添加人民币前缀</param>
///<exceptioncref=”ArgumentException”/>
///<returns>转换后的结果</returns>
publicstaticstringToCapital(thisstringinput,boolprefix=false){
#regionStep1输入有效性验证
if(!Regex.IsMatch(input,@”(?<=-|^)d*.?d*$”))
thrownewArgumentException(“错误的输入金额!”);
if(Regex.IsMatch(input,@”^d{25,}”))
thrownewArgumentException(“输入数据太大无法转换!”);
#endregion
#regionStep2格式化为中间字符串
varpositionDic=newDictionary<int,string>{
{0,”F”},{1,”J”},{2,”.”},{3,”S”},{4,”B”},{5,”Q”},{6,”W”},{7,”SW”},{8,”BW”},{9,”QW”},
{10,”Y”},{11,”SY”},{12,”BY”},{13,”QY”},{14,”WY”},{15,”SWY”},{16,”BWY”},{17,”QWY”},{18,”YY”},
{19,”SYY”},{20,”BYY”},{21,”QYY”},{22,”WYY”},{23,”SWYY”},{24,”BWYY”},{25,”QWYY”}
};
input=Regex.Replace(input,@”^.”,”0.”);
varintegerPart=Regex.Replace(input,@”^-|..*$”,””);
var_matchDecimal=Regex.Match(input,@”.d*$”,RegexOptions.None);
vardecimalPart=Regex.Replace(_matchDecimal.Success?Convert.ToDouble(_matchDecimal.Value).ToString(“0.00″):”00″,@”0.”,””);
varprocessStack=newStack<string>();
varcharsArray=(integerPart+decimalPart).Reverse<char>();
for(inti=0;i<charsArray.Count();i++){
processStack.Push(string.Format(“{0}{1}”,charsArray.ElementAt(i),positionDic[i]));
}
//符号处理
if(Regex.IsMatch(input,”^-“,RegexOptions.None)){
processStack.Push(“-“);
}
if(prefix){
processStack.Push(“¥”);
}
varprocess=string.Empty;
while(processStack.Count>0){
process+=processStack.Pop();
}
//语义处理模式队列
Queue<Tuple<string,string,MatchEvaluator>>patterns=newQueue<Tuple<string,string,MatchEvaluator>>();
varpatternBuilder=newStringBuilder();
for(inti=3;i<positionDic.Count;i++){
patternBuilder.AppendFormat(“{0}{1}”,(i==3?”(0(?:”:””)+positionDic[i],i==positionDic.Count-1?”)+?)+”:”|”);
}
patterns.Enqueue(Tuple.Create<string,string,MatchEvaluator>(patternBuilder.ToString(),”0″,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”,”0″,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>0){
varpattern=patterns.Dequeue();
if(pattern.Item3!=null){
process=Regex.Replace(process,pattern.Item1,pattern.Item3);
}
else{
process=Regex.Replace(process,pattern.Item1,pattern.Item2);
}
}
#endregion
#regionStep3翻译中间字符串
StringBuilderresult=newStringBuilder();
vartranslatorDic=newDictionary<char,string>{
{‘0’,”零”},{‘1’,”壹”},{‘2’,”贰”},{‘3’,”叁”},{‘4’,”肆”},{‘5’,”伍”},{‘6’,”陆”},{‘7’,”柒”},{‘8’,”捌”},{‘9’,”玖”},
{‘S’,”拾”},{‘B’,”佰”},{‘Q’,”仟”},{‘W’,”萬”},{‘Y’,”亿”},
{‘¥’,”人民币”},{‘-‘,”负”},{‘.’,”圆”},{‘J’,”角”},{‘F’,”分”},{‘Z’,”整”}
};
for(inti=0;i<process.Length;i++){
result.Append(translatorDic[process[i]]);
}
#endregion
returnresult.ToString();
}
您可能感兴趣的文章:人民币数字转换成大写形式自己实现string的substring方法人民币小写转大写,数字反转,正则优化PHP人民币金额数字转中文大写的函数代码PHP把数字转成人民币大写的函数分享将数字转换成大写的人民币表达式的js函数java实现将数字转换成人民币大写
C++设计模式之工厂方法模式
C++设计模式之简单工厂模式实例
上述就是C#学习教程:数字金额大写转换器制作代码分享(人民币大写转换)分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/905136.html