输入的是数字金额,输出的是金额的英文,请问如何实现?
金额范围是0.00到9999.99
如:$109.65
U.S.DOLLARS ONE HUNDGRED NINE AND CENTS SIXTY FIVE
------解决方案--------------------------------------------------------
帮你找了个你看看
- C# code
private string numberToEnglish(decimal y) { string numberStr=""; string lStr="";//小数点左边字符串 string rStr="";//小数点右边字符串 numberStr = (string) y.ToString(); int dot;//小数点位置 dot = numberStr.IndexOf("."); if (dot!= 0 & dot !=-1)//判断有没有小数 { lStr=numberStr.Substring(0,dot);//取小数点left的字串 if (numberStr.Substring(dot+1,2)=="00") { rStr=""; } else { rStr=numberStr.Substring(dot+1,2);//取小数点right的字串 } } else { lStr=numberStr;//没有小数点的情况 } string lStrRev; lStrRev=reverseString(lStr);//对左边的字串取反字串 string [] a= new string[5];//定义5个字串变量用来存放解析出的三位一组的字串 switch(lStrRev.Length % 3) { case 1: lStrRev = lStrRev + "00";break; case 2: lStrRev = lStrRev + "0";break; } string StrInt;//用来存放转换后的整数部分 StrInt=""; for(int i=0;i<=lStrRev.Length/3 -1;i++)//计算有多少个三位 { a[i]=reverseString(lStrRev.Substring(3*i,3));//截取第1个三位 if (a[i] != "000")//用来避免这种情况“1000000=ONE MILLION THOUSAND ONLY” { if (i!=0) { StrInt=w3(a[i]) + " " + dw(i.ToString()) + " " + StrInt;//用来加上“THOUSAND OR MILLION OR BILLION” } else { StrInt=w3(a[i]);//防止i=0时“lm=w3(a(i))+" "+dw(i)+" "+lm”多加两个尾空格 } } else { StrInt=w3(a[i]) + StrInt; } } string StrDce;//用来存放转换后的小数部分 StrDce=""; if ( dot != 0 & dot != -1 & rStr != "") { rStr="0" + rStr; StrDce=" AND POINT " + w2(rStr); } return StrInt + StrDce; } //将字符串反置 private string reverseString(string str) { int lenInt=str.Length; string [] z= new string [str.Length]; for(int i=0;i<lenInt;i++) { z[i]=str.Substring(i,1); } str=""; for (int i=lenInt-1;i>=0;i--) { str=str+z[i]; } return str; } private string zr4(string y) { string[] z= new string [10]; z[1]="ONE"; z[2]="TWO"; z[3]="THREE"; z[4]="FOUR"; z[5]="FIVE"; z[6]="SIX"; z[7]="SEVEN"; z[8]="EIGHT"; z[9]="NINE"; return z[Int32.Parse(y.Substring(0,1))]; } private string zr3(string y) { string[] z= new string [10]; z[1]="ONE"; z[2]="TWO"; z[3]="THREE"; z[4]="FOUR"; z[5]="FIVE"; z[6]="SIX"; z[7]="SEVEN"; z[8]="EIGHT"; z[9]="NINE"; return z[Int32.Parse(y.Substring(2,1))]; } private string zr2(string y) { string[] z= new string [20]; z[10]="TEN"; z[11]="ELEVEN"; z[12]="TWELVE"; z[13]="THIRTEEN"; z[14]="FOURTEEN"; z[15]="FIFTEEN"; z[16]="SIXTEEN"; z[17]="SEVENTEEN"; z[18]="EIGHTEEN"; z[19]="NINETEEN"; return z[Int32.Parse(y.Substring(1,2))]; } private string zr1(string y) { string[] z= new string [10]; z[1]="TEN"; z[2]="TWENTY"; z[3]="THIRTY"; z[4]="FORTY"; z[5]="FIFTY"; z[6]="SIXTY"; z[7]="SEVENTY"; z[8]="EIGHTY"; z[9]="NINETY"; return z[Int32.Parse(y.Substring(1,1))]; } private string dw(string y) { string[] z= new string[5]; z[0]=""; z[1]="THOUSAND"; z[2]="MILLION"; z[3]="BILLION"; return z[Int32.Parse(y)]; } //用来制作2位数字转英文 private string w2(string y) { string tempstr; if (y.Substring(1,1)=="0")//判断是否小于十 tempstr= zr3(y); else if (y.Substring(1,1)=="1")//判断是否在十到二十之间 tempstr= zr2(y); else { if (y.Substring(2,1)=="0")//判断是否为大于二十小于一百的能被十整除的数(为了去掉尾空格) { tempstr= zr1(y); } else { tempstr= zr1(y)+" "+zr3(y); } } return tempstr; } private string w3(string y) { string tempstr; if (y.Substring(0,1)=="0")//判断是否小于一百 tempstr=w2(y); else { if (y.Substring(1,2)=="00")//判断是否能被一百整除 { tempstr=zr4(y) + " " + "HUNDRED"; } else { tempstr=zr4(y)+" "+"HUNDRED"+" "+"AND"+" "+w2(y);//不能整除的要后面加“AND” } } return tempstr; }