输入的是数字金额,输出的是金额的英文,请问如何实现?
金额范围是0.00到9999.99
如:$109.65
U.S.DOLLARS ONE HUNDGRED NINE AND CENTS SIXTY FIVE
金额范围是0.00到9999.99
如:$109.65
U.S.DOLLARS ONE HUNDGRED NINE AND CENTS SIXTY FIVE
解决方案 »
- 问个菜鸟问题
- 网站配置好了但是不能访问
- 急!如何将DataTable作为水晶报表的数据源
- 如何用javascript取datagrid中某行某列的值呀
- 用Jmail发邮件出错了~~~~~~~100分相送,帮顶也有分
- 在asp.net中使图片居中的html代码是什么?
- 免费提供一个数据访问层,高手勿进
- 各位大师,asp.net分页以后,我在第一页选中的单选按钮的值如何在第二页一同提交到数据库
- 下拉列表问题
- 怎样用验证控件判断输入的用户名已经存在
- vs2008,页面中放了个ScriptManager和UpdatePanel,UpdatePanel里面放了个文本框和按钮,点击按钮还是整页刷新了
- 有谁知道asp.net 2.0里面HiddenField控件,在.net 1.0里面是什么?
{
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;
}
NumberToEnglish num = new NumberToEnglish();
MessageBox.Show(num.changeCurrencyToWords(123));using System;namespace custom.util{public class NumberToEnglish{public String changeNumericToWords(double numb){String num = numb.ToString();return changeToWords(num, false);}public String changeCurrencyToWords(String numb){return changeToWords(numb, true);}public String changeNumericToWords(String numb){return changeToWords(numb, false);}public String changeCurrencyToWords(double numb){return changeToWords(numb.ToString(), true);}private String changeToWords(String numb, bool isCurrency){String val = "", wholeNo = numb, points = "", andStr = "", pointStr="";String endStr = (isCurrency) ? ("Only") : ("");try{int decimalPlace = numb.IndexOf(".");if (decimalPlace > 0){wholeNo = numb.Substring(0, decimalPlace);points = numb.Substring(decimalPlace+1);if (Convert.ToInt32(points) > 0){andStr = (isCurrency)?("and"):("point");// just to separate whole numbers from points/centsendStr = (isCurrency) ? ("Cents "+endStr) : ("");pointStr = translateCents(points);}}val = String.Format("{0} {1}{2} {3}",translateWholeNumber(wholeNo).Trim(),andStr,pointStr,endStr);}catch { ;}return val;}private String translateWholeNumber(String number){string word = "";try{bool beginsZero = false;//tests for 0XXbool isDone = false;//test if already translateddouble dblAmt = (Convert.ToDouble(number));//if ((dblAmt > 0) && number.StartsWith("0"))if (dblAmt > 0){//test for zero or digit zero in a nuemricbeginsZero = number.StartsWith("0");int numDigits = number.Length;int pos = 0;//store digit groupingString place = "";//digit grouping name:hundres,thousand,etc...switch (numDigits){case 1://ones' rangeword = ones(number);isDone = true;break;case 2://tens' rangeword = tens(number);isDone = true;break;case 3://hundreds' rangepos = (numDigits % 3) + 1;place = " Hundred ";break;case 4://thousands' rangecase 5:case 6:pos = (numDigits % 4) + 1;place = " Thousand ";break;case 7://millions' rangecase 8:case 9:pos = (numDigits % 7) + 1;place = " Million ";break;case 10://Billions's rangepos = (numDigits % 10) + 1;place = " Billion ";break;//add extra case options for anything above Billion...default:isDone = true;break;}if (!isDone){//if transalation is not done, continue...(Recursion comes in now!!)word = translateWholeNumber(number.Substring(0, pos)) + place + translateWholeNumber(number.Substring(pos));//check for trailing zerosif (beginsZero) word = " and " + word.Trim();}//ignore digit grouping namesif (word.Trim().Equals(place.Trim())) word = "";}}catch { ;}return word.Trim();}private String tens(String digit){int digt = Convert.ToInt32(digit);String name = null;switch (digt){case 10:name = "Ten";break;case 11:name = "Eleven";break;case 12:name = "Twelve";break;case 13:name = "Thirteen";break;case 14:name = "Fourteen";break;case 15:name = "Fifteen";break;case 16:name = "Sixteen";break;case 17:name = "Seventeen";break;case 18:name = "Eighteen";break;case 19:name = "Nineteen";break;case 20:name = "Twenty";break;case 30:name = "Thirty";break;case 40:name = "Fourty";break;case 50:name = "Fifty";break;case 60:name = "Sixty";break;case 70:name = "Seventy";break;case 80:name = "Eighty";break;case 90:name = "Ninety";break;default:if (digt > 0){name = tens(digit.Substring(0, 1) + "0") + " " + ones(digit.Substring(1));}break;}return name;}private String ones(String digit){int digt = Convert.ToInt32(digit);String name = "";switch (digt){case 1:name = "One";break;case 2:name = "Two";break;case 3:name = "Three";break;case 4:name = "Four";break;case 5:name = "Five";break;case 6:name = "Six";break;case 7:name = "Seven";break;case 8:name = "Eight";break;case 9:name = "Nine";break;}return name;}private String translateCents(String cents){String cts = "", digit = "", engOne = "";for (int i = 0; i < cents.Length; i++){digit = cents[i].ToString();if (digit.Equals("0")){engOne = "Zero";}else{engOne = ones(digit);}cts += " " + engOne;}return cts;}}}