问题描述
输入一串数字转换为汉语读数。比如1234,转换为壹仟贰佰三十四。。。。用windows窗体设计。求大神指导,小女胜感激。
解决方案
解决方案二:
解决方案三:
///<summary>///转换数字金额主函数(包括小数)///</summary>///<paramname="str">数字字符串</param>///<returns>转换成中文大写后的字符串或者出错信息提示字符串</returns>publicstringConvertSum(stringstr){if(!IsPositveDecimal(str))return"格式错误!";if(Double.Parse(str)>999999999999.99)return"金额溢出";char[]ch=newchar[1];ch[0]='.';//小数点string[]splitstr=null;//定义按小数点分割后的字符串数组splitstr=str.Split(ch[0]);//按小数点分割字符串if(splitstr.Length==1)//只有整数部分returnConvertData(str)+"圆整";else//有小数部分{stringrstr;rstr=ConvertData(splitstr[0])+"圆";//转换整数部分stringxiaoshu=ConvertXiaoShu(splitstr[1]);rstr+=(xiaoshu=="")?"整":xiaoshu;//转换小数部分returnrstr;}}///<summary>///判断是否是正数字字符串///</summary>///<paramname="str">判断字符串</param>///<returns>如果是数字,返回true,否则返回false</returns>publicboolIsPositveDecimal(stringstr){Decimald;try{d=Decimal.Parse(str);}catch(Exception){returnfalse;}if(d>0)returntrue;elsereturnfalse;}///<summary>///转换数字(整数)///</summary>///<paramname="str">需要转换的整数数字字符串</param>///<returns>转换成中文大写后的字符串</returns>publicstringConvertData(stringstr){stringtmpstr="";stringrstr="";intstrlen=str.Length;if(strlen<=4)//数字长度小于四位{rstr=ConvertDigit(str);}else{if(strlen<=8)//数字长度大于四位,小于八位{tmpstr=str.Substring(strlen-4,4);//先截取最后四位数字rstr=ConvertDigit(tmpstr);//转换最后四位数字tmpstr=str.Substring(0,strlen-4);//截取其余数字//将两次转换的数字加上萬后相连接rstr=String.Concat(ConvertDigit(tmpstr)+"萬",rstr);rstr=rstr.Replace("零萬","萬");rstr=rstr.Replace("零零","零");}elseif(strlen<=12)//数字长度大于八位,小于十二位{tmpstr=str.Substring(strlen-4,4);//先截取最后四位数字rstr=ConvertDigit(tmpstr);//转换最后四位数字tmpstr=str.Substring(strlen-8,4);//再截取四位数字rstr=String.Concat(ConvertDigit(tmpstr)+"萬",rstr);tmpstr=str.Substring(0,strlen-8);rstr=String.Concat(ConvertDigit(tmpstr)+"億",rstr);rstr=rstr.Replace("零億","億");rstr=rstr.Replace("零萬","零");rstr=rstr.Replace("零零","零");rstr=rstr.Replace("零零","零");}}strlen=rstr.Length;if(strlen>=2){switch(rstr.Substring(strlen-2,2)){case"佰零":rstr=rstr.Substring(0,strlen-2)+"佰";break;case"仟零":rstr=rstr.Substring(0,strlen-2)+"仟";break;case"萬零":rstr=rstr.Substring(0,strlen-2)+"萬";break;case"億零":rstr=rstr.Substring(0,strlen-2)+"億";break;}}returnrstr;}///<summary>///转换数字(小数部分)///</summary>///<paramname="str">需要转换的小数部分数字字符串</param>///<returns>转换成中文大写后的字符串</returns>publicstringConvertXiaoShu(stringstr){intstrlen=str.Length;stringrstr;if(strlen==1){rstr=ConvertChinese(str)+"角";returnrstr;}else{stringtmpstr=str.Substring(0,1);rstr=ConvertChinese(tmpstr)+"角";tmpstr=str.Substring(1,1);rstr+=ConvertChinese(tmpstr)+"分";rstr=rstr.Replace("零分","");rstr=rstr.Replace("零角","");returnrstr;}}///<summary>///转换数字///</summary>///<paramname="str">转换的字符串(四位以内)</param>///<returns></returns>publicstringConvertDigit(stringstr){intstrlen=str.Length;stringrstr="";switch(strlen){case1:rstr=ConvertChinese(str);break;case2:rstr=Convert2Digit(str);break;case3:rstr=Convert3Digit(str);break;case4:rstr=Convert4Digit(str);break;}rstr=rstr.Replace("拾零","拾");strlen=rstr.Length;returnrstr;}///<summary>///转换四位数字///</summary>publicstringConvert4Digit(stringstr){stringstr1=str.Substring(0,1);stringstr2=str.Substring(1,1);stringstr3=str.Substring(2,1);stringstr4=str.Substring(3,1);stringrstring="";rstring+=ConvertChinese(str1)+"仟";rstring+=ConvertChinese(str2)+"佰";rstring+=ConvertChinese(str3)+"拾";rstring+=ConvertChinese(str4);rstring=rstring.Replace("零仟","零");rstring=rstring.Replace("零佰","零");rstring=rstring.Replace("零拾","零");rstring=rstring.Replace("零零","零");rstring=rstring.Replace("零零","零");rstring=rstring.Replace("零零","零");returnrstring;}///<summary>///转换三位数字///</summary>publicstringConvert3Digit(stringstr){stringstr1=str.Substring(0,1);stringstr2=str.Substring(1,1);stringstr3=str.Substring(2,1);stringrstring="";rstring+=ConvertChinese(str1)+"佰";rstring+=ConvertChinese(str2)+"拾";rstring+=ConvertChinese(str3);rstring=rstring.Replace("零佰","零");rstring=rstring.Replace("零拾","零");rstring=rstring.Replace("零零","零");rstring=rstring.Replace("零零","零");returnrstring;}///<summary>///转换二位数字///</summary>publicstringConvert2Digit(stringstr){stringstr1=str.Substring(0,1);stringstr2=str.Substring(1,1);stringrstring="";rstring+=ConvertChinese(str1)+"拾";rstring+=ConvertChinese(str2);rstring=rstring.Replace("零拾","零");rstring=rstring.Replace("零零","零");returnrstring;}///<summary>///将一位数字转换成中文大写数字///</summary>publicstringConvertChinese(stringstr){//"零壹贰叁肆伍陆柒捌玖拾佰仟萬億圆整角分"stringcstr="";switch(str){case"0":cstr="零";break;case"1":cstr="壹";break;case"2":cstr="贰";break;case"3":cstr="叁";break;case"4":cstr="肆";break;case"5":cstr="伍";break;case"6":cstr="陆";break;case"7":cstr="柒";break;case"8":cstr="捌";break;case"9":cstr="玖";break;}return(cstr);}
解决方案四:
来个牛的//两种简单的C#小写数字金额转换成大写人民币金额的方法//第一种最简单的方法是使用正则表达式,这种我是彻底服了//usingSystem.Text.RegularExpressions;//首先引入命名空间privatestringMoneyToUpper(stringmoney){strings=double.Parse(money).ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");stringd=Regex.Replace(s,@"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[.]|$))))","${b}${z}");returnRegex.Replace(d,".",delegate(Matchm){return"负圆空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟万億兆京垓秭穰"[m.Value[0]-'-'].ToString();});}//第二种其实也挺简单的,用数组:privatestringMoneyToUpper1(stringmoney){//将小写金额转换成大写金额doubleMyNumber=Convert.ToDouble(money);String[]MyScale={"分","角","圆","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","兆","拾","佰","仟"};String[]MyBase={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};StringM="";boolisPoint=false;if(money.IndexOf(".")!=-1){money=money.Remove(money.IndexOf("."),1);isPoint=true;}for(inti=money.Length;i>0;i--){intMyData=Convert.ToInt16(money[money.Length-i].ToString());//?M+=MyBase[MyData];//?if(isPoint==true){M+=MyScale[i-1];//?}else{M+=MyScale[i+1];//?}}returnM;}
longnum=987878;stringUpper=MoneyToUpper(num.ToString());stringUpper1=MoneyToUpper1(num.ToString());string[]reslut=newstring[20];/*Upper="玖拾捌万柒仟捌佰柒拾捌圆"Upper1="玖拾捌万柒仟捌佰柒拾捌圆"*/*/
解决方案五:
这个有统一的方法,搜索一大把