# 将小写数字金额转换为大写得金额

function convertCurrency(currencyDigits) {
// Constants:
var MAXIMUM_NUMBER = 99999999999.99;
// Predefine the radix characters and currency symbols for output:
var CN_ZERO = "零";
var CN_ONE = "壹";
var CN_TWO = "贰";
var CN_THREE = "叁";
var CN_FOUR = "肆";
var CN_FIVE = "伍";
var CN_SIX = "陆";
var CN_SEVEN = "柒";
var CN_EIGHT = "捌";
var CN_NINE = "玖";
var CN_TEN = "拾";
var CN_HUNDRED = "佰";
var CN_THOUSAND = "仟";
var CN_TEN_THOUSAND = "万";
var CN_HUNDRED_MILLION = "亿";
var CN_SYMBOL = "人民币";
var CN_DOLLAR = "元";
var CN_TEN_CENT = "角";
var CN_CENT = "分";
var CN_INTEGER = "整";

// Variables:
var integral; // Represent integral part of digit number.
var decimal; // Represent decimal part of digit number.
var outputCharacters; // The output result.
var parts;
var zeroCount;
var i, p, d;
var quotient, modulus;

// Validate input string:
currencyDigits = currencyDigits.toString();
if (currencyDigits == "") {
return "";
}
if (currencyDigits.match(/[^,./d]/) != null) {
alert("Invalid characters in the input string!");
return "";
}
if ((currencyDigits).match(/^((/d{1,3}(,/d{3})*(.((/d{3},)*/d{1,3}))?)|(/d+(./d+)?))$/) == null) { alert("Illegal format of digit number!"); return ""; } // Normalize the format of input digits: currencyDigits = currencyDigits.replace(/,/g, ""); // Remove comma delimiters. currencyDigits = currencyDigits.replace(/^0+/, ""); // Trim zeros at the beginning. // Assert the number is not greater than the maximum number. if (Number(currencyDigits) > MAXIMUM_NUMBER) { alert("Too large a number to convert!"); return ""; } // Process the coversion from currency digits to characters: // Separate integral and decimal parts before processing coversion: parts = currencyDigits.split("."); if (parts.length > 1) { integral = parts[0]; decimal = parts[1]; // Cut down redundant decimal digits that are after the second. decimal = decimal.substr(0, 2); } else { integral = parts[0]; decimal = ""; } // Prepare the characters corresponding to the digits: digits = new Array(CN_ZERO, CN_ONE, CN_TWO, CN_THREE, CN_FOUR, CN_FIVE, CN_SIX, CN_SEVEN, CN_EIGHT, CN_NINE); radices = new Array("", CN_TEN, CN_HUNDRED, CN_THOUSAND); bigRadices = new Array("", CN_TEN_THOUSAND, CN_HUNDRED_MILLION); decimals = new Array(CN_TEN_CENT, CN_CENT); // Start processing: outputCharacters = ""; // Process integral part if it is larger than 0: if (Number(integral) > 0) { zeroCount = 0; for (i = 0; i < integral.length; i++) { p = integral.length - i - 1; d = integral.substr(i, 1); quotient = p / 4; modulus = p % 4; if (d == "0") { zeroCount++; } else { if (zeroCount > 0) { outputCharacters += digits[0]; } zeroCount = 0; outputCharacters += digits[Number(d)] + radices[modulus]; } if (modulus == 0 && zeroCount < 4) { outputCharacters += bigRadices[quotient]; } } outputCharacters += CN_DOLLAR; } // Process decimal part if there is: if (decimal != "") { for (i = 0; i < decimal.length; i++) { d = decimal.substr(i, 1); if (d != "0") { outputCharacters += digits[Number(d)] + decimals[i]; } } } // Confirm and return the final output string: if (outputCharacters == "") { outputCharacters = CN_ZERO + CN_DOLLAR; } if (decimal == "") { outputCharacters += CN_INTEGER; } outputCharacters = CN_SYMBOL + outputCharacters; return outputCharacters; } function atoc(numberValue){ var numberValue=new String(Math.round(numberValue*100)); // 数字金额 var chineseValue=""; // 转换后的汉字金额 var String1 = "零壹贰叁肆伍陆柒捌玖"; // 汉字数字 var String2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"; // 对应单位 var len=numberValue.length; // numberValue 的字符串长度 var Ch1; // 数字的汉语读法 var Ch2; // 数字位的汉字读法 var nZero=0; // 用来计算连续的零值的个数 var String3; // 指定位置的数值 if(len>15){ alert("超出计算范围"); return ""; } if (numberValue==0){ chineseValue = "零元整"; return chineseValue; } String2 = String2.substr(String2.length-len, len); // 取出对应位数的STRING2的值 for(var i=0; i<len; i++){ String3 = parseInt(numberValue.substr(i, 1),10); // 取出需转换的某一位的值 //alert(String3); if ( i != (len - 3) && i != (len - 7) && i != (len - 11) && i !=(len - 15) ){ if ( String3 == 0 ){ Ch1 = ""; Ch2 = ""; nZero = nZero + 1; }else if ( String3 != 0 && nZero != 0 ){ Ch1 = "零" + String1.substr(String3, 1); Ch2 = String2.substr(i, 1); nZero = 0; }else{ Ch1 = String1.substr(String3, 1); Ch2 = String2.substr(i, 1); nZero = 0; } }else{ // 该位是万亿，亿，万，元位等关键位 if( String3 != 0 && nZero != 0 ){ Ch1 = "零" + String1.substr(String3, 1); Ch2 = String2.substr(i, 1); nZero = 0; }else if ( String3 != 0 && nZero == 0 ){ Ch1 = String1.substr(String3, 1); Ch2 = String2.substr(i, 1); nZero = 0; }else if( String3 == 0 && nZero >= 3 ){ Ch1 = ""; Ch2 = ""; nZero = nZero + 1; }else{ Ch1 = ""; Ch2 = String2.substr(i, 1); nZero = nZero + 1; } if( i == (len - 11) || i == (len - 3)) { // 如果该位是亿位或元位，则必须写上 Ch2 = String2.substr(i, 1); } } chineseValue = chineseValue + Ch1 + Ch2; } if ( String3 == 0 ){ // 最后一位（分）为0时，加上“整” chineseValue = chineseValue + "整"; } return chineseValue; } =======另一种实现=================================================== function Chinese(num) { if(!/^/d*(/./d*)?$/.test(num)){alert("Number is wrong!"); return false;}

var AA = new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
var BB = new Array("元","拾","佰","仟","萬","億","","");
var CC = new Array("角","分","厘");

var a = (""+ num).replace(/(^0*)/g, "").split("."), k = 0, re = "";

for(var i=a[0].length-1; i>=0; i--)
{
switch(k)
{
case 0 : re = BB[7] + re; break;
case 4 : if(!new RegExp("0{4}//d{"+ (a[0].length-i-1) +"}\$").test(a[0]))
re = BB[4] + re; break;
case 8 : re = BB[5] + re; BB[7] = BB[5]; k = 0; break;
}
if(k%4 == 2 && a[0].charAt(i+2) != 0 && a[0].charAt(i+1) == 0) re = AA[0] + re;
if(a[0].charAt(i) != 0) re = AA[a[0].charAt(i)] + BB[k%4] + re; k++;
}

if(a.length>1) //加上小数部分(如果有小数部分)
{
re += BB[6];
for(var i=0; i<a[1].length; i++)
{
if(i>2) break;
re += AA[a[1].charAt(i)] + CC[i];
}
}
return re;
}

====另一种实现=====================================================================

function toChinese(num){
var arr1=new Array("元","万","亿");
num=num.toString();
var strRtn="";
if(num.charAt(0)=="-"){
strRtn+="(<b>负</b>)";
num=num.substring(1,num.length);
}
var ss=num.split(".");
var Integer=ss[0];
var Float=ss[1];
if(Float.length >2){
Float = Float.substring(0,2);
}

var part=splitFour(Integer);
var plen=part.length;
for(var i=0;i<plen;i++){
if(i==0 && plen > 1) strRtn+=ReadFour(part[i],0)+arr1[plen-1-i];
}
if(!Float || !checkZero(Float)) {
strRtn+="整"
}else{
strRtn+=AfterPoint(Float);
}
return strRtn;
}

function AfterPoint(num){
var arr1=new Array("角","分");
var arr2=new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
var str="";
for(var i=0;i<num.length;i++){
if(num.charAt(i)!="0")
str+=arr2[num.charAt(i)]+arr1[i];
else{
if(i!=num.length-1) str+="零";
}
}
return str;
}
function splitFour(num){
var len=num.length;
var count=Math.ceil(len/4);
var arr=new Array("");
for(var i=0;i<count;i++){
arr[count-i-1]=num.substring(len-4,len);
len-=4;
}
return arr;
}

var arr1=new Array("","拾","佰","仟");
var arr2=new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
num=num.toString();
var strRtn="";
len=num.length
for(var i=len-1;i>=0;i--){
if(num.charAt(len-i-1)!="0")
strRtn+=arr2[num.charAt(len-i-1)]+arr1[i];
else{
if(iFlag!=0 && strRtn.charAt(strRtn.length-1)!="零" && checkZero(num.substring(len-i,len)))
strRtn+="零";
}
}
return strRtn;
}
function checkZero(str){
for(var i=0;i<str.length;i++)
if(str.charAt(i)!="0") return true;
return false;
}

• 本文已收录于以下专栏：

举报原因： 您举报文章：将小写数字金额转换为大写得金额 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)