问题描述
网上只有小写转大写的,有谁能帮我找个大写转小写的?(写代码能实现,不过没时间写和测试了,各位帮帮忙给我找找)多谢了!
解决方案
解决方案二:
privatefloatgetMoney(stringstrBig){stringstrExp="";string[]arrBig=newstring[]{"整","","零","+0","壹","+1","贰","+2","叁","+3","肆","+4","伍","+5","陆","+6","柒","+7","捌","+8","玖","+9","分","*0.01","角","*0.1","元","*1","拾","*10.00","佰","*100.00","仟","*1000.00","万","*10000.00","亿","*100000000.00"};for(inti=0;i<strBig.Length;i++){for(intj=0;j<arrBig.Length-1;j+=2){if(arrBig[j]==strBig[i].ToString()){strExp+=arrBig[j+1].ToString();continue;}}}objectret=newDataTable().Compute(strExp,"");returnfloat.Parse(ret.ToString());//Console.WriteLine(getMoney("玖仟零贰拾壹元陆角肆分"));//Console.WriteLine(getMoney("玖仟万亿零贰拾壹元陆角肆分"));}
解决方案三:
publicstaticDecimalGetDecimal(objectsNum){returnGetDecimal(sNum,0);}publicstaticDecimalGetDecimal(objectsNum,DecimaliDefault){returnGetDecimal(sNum,0,-1);}publicstaticDecimalGetDecimal(objectsNum,DecimaliDefault,intiDotNum){try{Decimald=Convert.ToDecimal(sNum);if(iDotNum==-1){strings=d.ToString();for(inti=s.Length-1;i>=0;i--){if(s.IndexOf('.')>-1&&(s[i]=='0'||s[i]=='.')){s=s.Substring(0,s.Length-1);}else{break;}}d=Convert.ToDecimal(s);returnd;}else{returnMath.Round(d,iDotNum);}publicstaticDecimalGetDecimal(objectsNum){returnGetDecimal(sNum,0);}publicstaticDecimalGetDecimal(objectsNum,DecimaliDefault){returnGetDecimal(sNum,0,-1);}publicstaticDecimalGetDecimal(objectsNum,DecimaliDefault,intiDotNum){try{Decimald=Convert.ToDecimal(sNum);if(iDotNum==-1){strings=d.ToString();for(inti=s.Length-1;i>=0;i--){if(s.IndexOf('.')>-1&&(s[i]=='0'||s[i]=='.')){s=s.Substring(0,s.Length-1);}else{break;}}d=Convert.ToDecimal(s);returnd;}else{returnMath.Round(d,iDotNum);}privatestaticstringUpperMoney(stringsNum,string[]sUpperNum,string[]upperUnit){returnUpperMoney(sNum,sUpperNum,upperUnit,false);}privatestaticstringUpperMoney(stringsNum,string[]sUpperNum,string[]upperUnit,boolb){char[]cNums=sNum.ToCharArray();StringBuildersb=newStringBuilder();for(inti=0;i<sNum.Length;i++){intiNum=int.Parse(cNums[i].ToString());stringunit=string.Empty;if(iNum!=0){if(b)unit=upperUnit[i];elseunit=upperUnit[sNum.Length-i-1];}elseif(AddUnitAtZero(sNum.Length-i)){if(!b)unit=upperUnit[sNum.Length-i-1];}sb.Append(sUpperNum[iNum]+unit);}returnReplaceInvalid(sb.ToString());}privatestaticboolAddUnitAtZero(intindex){for(inti=0;i<8;i++){if(index==4*i+1)returntrue;}returnfalse;}privatestaticstringReplaceInvalid(stringsNum){while(sNum.LastIndexOf("零零")!=-1||sNum.LastIndexOf("零元")!=-1||sNum.LastIndexOf("零萬")!=-1||sNum.LastIndexOf("零億")!=-1||sNum.LastIndexOf("零兆")!=-1||sNum.LastIndexOf("億萬")!=-1||sNum.LastIndexOf("兆萬億")!=-1||sNum.LastIndexOf("京億兆")!=-1){sNum=sNum.Replace("零零","零").Replace("零元","元").Replace("零萬","萬").Replace("零億","億");sNum=sNum.Replace("零兆","兆").Replace("億萬","億").Replace("兆萬億","兆").Replace("京億兆","京");}returnsNum+"整"=="元整"?"零元整":sNum+"整";}
解决方案四:
两位大哥真快啊,自己写的吧,我先看看等会结贴。以后还要多讨教。谢谢!
解决方案五:
大写换小写无论如何很难做到完全准确。所以建议再做个小写换大写来进行校验。
解决方案六:
临时写得,还没经过全面测试publicdoubleDecodeMoneyCn(stringAText){AText=AText.Replace("万万","亿");AText=AText.Replace("点","元");AText=AText.Replace("块","元");AText=AText.Replace("毛","角");doublevResult=0;doublevNumber=0;//当前数字doublevTemp=0;intvDecimal=0;//是否出现小数点foreach(charvCharinAText){inti="零一二三四五六七八九".IndexOf(vChar);if(i<0)i="零幺两三四五六七八九".IndexOf(vChar);if(i<0)i="零壹贰叁肆伍陆柒捌玖".IndexOf(vChar);if(i>0){vNumber=i;if(vDecimal>0){vResult+=vNumber*Math.Pow(10,-vDecimal);vDecimal++;vNumber=0;}}else{i="元十百千万亿".IndexOf(vChar);if(i<0)i="整拾佰仟万亿".IndexOf(vChar);if(i==5)i=8;if(i>0){if(i>=4){vTemp+=vNumber;if(vTemp==0)vTemp=1;vResult+=vTemp*Math.Pow(10,i);vTemp=0;}elsevTemp+=vNumber*Math.Pow(10,i);}else{i="元角分".IndexOf(vChar);if(i>0){vTemp+=vNumber;vResult+=vTemp*Math.Pow(10,-i);vTemp=0;}elseif(i==0){vTemp+=vNumber;vResult+=vTemp;vDecimal=1;vTemp=0;}}vNumber=0;}}returnvResult+vTemp+vNumber;}privatevoidbutton2_Click(objectsender,EventArgse){string[]vTestText={"十二点五六","一亿零一万零五","四万万","九十八亿七千六百五十四万三千二百一十","五元一角四分","壹佰元整","三千五百万","九块二毛"};foreach(stringvTextinvTestText){Console.WriteLine("DecodeMoneyCn("{0}")={1}",vText,DecodeMoneyCn(vText));}}
部分测试结果如下[code=BatchFile]DecodeMoneyCn("十二点五六")=2.56DecodeMoneyCn("一亿零一万零五")=100010005DecodeMoneyCn("四万万")=400000000DecodeMoneyCn("九十八亿七千六百五十四万三千二百一十")=9876543210DecodeMoneyCn("五元一角四分")=5.14DecodeMoneyCn("壹佰元整")=100DecodeMoneyCn("三千五百万")=35000000DecodeMoneyCn("九块二毛")=9.2[/code]