最近用到金额大写的代码,不过在网上找到的往往都是中文金额大写转换“壹贰叁肆伍陆柒捌玖”的那种,而需我要的是英文的,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>
/*
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>