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

转载 2004年08月27日 13:09:00

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 digits, radices, bigRadices, decimals;
 var zeroCount;
 var i, p, d;
 var quotient, modulus;
 
// Validate input string:
 currencyDigits = currencyDigits.toString();
 if (currencyDigits == "") {
  alert("Empty input!");
  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);
 }
 if(Integer.length>12){ alert("数值超过千亿,无法识别!"); return "数值超过千亿,无法识别!";}

 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];
  else strRtn+=ReadFour(part[i],1)+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;
}

function ReadFour(num,iFlag){
 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个字)