英文金额大写源码-javascript版

最近用到金额大写的代码,不过在网上找到的往往都是中文金额大写转换“壹贰叁肆伍陆柒捌玖”的那种,而需我要的是英文的,Thousand,Million那种。

baidu & google了一大轮找到了一个VBA版本的代码,加工完善之,成了我现在需要的Javascript版,pub出来请大家指教一下

<script language="javascript" type="text/javascript">

/*

Money2Letters - javascript版

*/

function Id(v){return document.getElementById(v)}

function funcMoney2Letters(){

var iNum = Math.round(parseFloat(Id("txtInput").value*100))/100;//保留最后两位小数

if(!iNum) {Id("divOutput").innerHTML="Error!";return;}

var arrPlace = new Array( '', ' Thousand ', ' Million ', ' Billion ', ' Trillion ', ' Quadrillion ', ' Quintillion ', ' Sextillion ', ' Septillion ', ' Octillion ', ' Nonillion ', ' Decillion ', ' Undecillion ', ' Duodecillion ' );

var strNum = iNum+"";

Id("txtInput").value = strNum;

var strInt = strNum;//整数部分

var idxPoint = strNum.indexOf('.');

var Cents = "";

if(idxPoint>0){//小数部分

var strCents = strNum.substring(idxPoint+1);

if(strCents.length == 1) strCents += "0";

Cents = funcConvertTens(strCents);

strInt = strInt.substring(0,idxPoint);//整数部分

}

var iCount = 0;

var Dollars = "";

while(strInt != ""){

var Temp = funcConvertHundreds(strInt.substring(strInt.length - 3));

if(Temp != "")Dollars = Temp + arrPlace[iCount] + Dollars;

if(Temp.length > 3){

strInt = strInt.substring(0,strInt.length -3);

}

else

{

strInt = "";

}

iCount ++;

if(iCount>=arrPlace.length) break;//数值太大无法处理

}

var res = "";

if(Dollars == "One"){

res = Dollars + " Dollar";

}

else if(Dollars != ""){

res = Dollars + " Dollars";

}

if(Cents != "" && Dollars != "") res += " AND"

if(Cents == ""){

res += " Only";

}

else if(Cents == "One"){

res += " One Cent";

}

else{

res += " "+Cents+" Cents";

}

Id("divOutput").innerHTML = res;

}

//处理十位数

function funcConvertTens(v){

var vLeft = parseInt(v.substring(0,1));

var vRight = parseInt(v.substring(1));

var res = "";

if(vLeft == 1){

switch(vRight){

case 0:res = "Ten";break;

case 1:res = "Eleven";break;

case 2:res = "Twelve";break;

case 3:res = "Thirteen";break;

case 4:res = "Fourteen";break;

case 5:res = "Fifteen";break;

case 6:res = "Sixteen";break;

case 7:res = "Seventeen";break;

case 8:res = "Eighteen";break;

case 9:res = "Nineteen";break;

}

}

else if(vLeft>1){

switch(vLeft){

case 2:res = "Twenty";break;

case 3:res = "Thirty";break;

case 4:res = "Forty";break;

case 5:res = "Fifty";break;

case 6:res = "Sixty";break;

case 7:res = "Seventy";break;

case 8:res = "Eighty";break;

case 9:res = "Ninety";break;

}

}

if(vLeft == 0){

res = funcConvertDigit(vRight);

}

else if(vLeft>1 && vRight>0){

res += "-" + funcConvertDigit(vRight)

}

return res;

}

//处理个位数

function funcConvertDigit(v){

var res = "";

switch(v){

case 1:res = "One";break;

case 2:res = "Tow";break;

case 3:res = "Three";break;

case 4:res = "Four";break;

case 5:res = "Five";break;

case 6:res = "Six";break;

case 7:res = "Seven";break;

case 8:res = "Eight";break;

case 9:res = "Nine";break;

}

return res;

}

//处理百位数

function funcConvertHundreds(v){

var res = "";

var vVal = parseInt(v);

if(vVal == 0) return res;

v = "000"+v;

v = v.substring(v.length -3)

vRight = parseInt(v.substr(2,1));

vLeft = parseInt(v.substr(0,1));

vMid = parseInt(v.substr(1,1));

if(vLeft>0){

if(vMid + vRight > 0) {

res = funcConvertDigit(vLeft) + " Hundred and ";

}

else {

res = funcConvertDigit(vLeft) + " Hundred ";

}

}

if(vMid>0){

res += funcConvertTens(vMid + "" + vRight);

}

else{

res += funcConvertDigit(vRight);

}

return res;

}

</script>