当前位置: 代码迷 >> ASP.NET >> 金额翻译成英文!该如何解决
  详细解决方案

金额翻译成英文!该如何解决

热度:9691   发布时间:2013-02-25 00:00:00.0
金额翻译成英文!
输入的是数字金额,输出的是金额的英文,请问如何实现?
金额范围是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;  }
  相关解决方案