ExpandedBlockStart.gif
  1  function convertCurrency(currencyDigits) {
  2      // Constants: 
  3       var MAXIMUM_NUMBER = 99999999999.99;
  4      // Predefine the radix characters and currency symbols for output: 
  5       /*
  6      var CN_ZERO = "零";
  7      var CN_ONE = "壹";
  8      var CN_TWO = "贰";
  9      var CN_THREE = "叁";
 10      var CN_FOUR = "肆";
 11      var CN_FIVE = "伍";
 12      var CN_SIX = "陆";
 13      var CN_SEVEN = "柒";
 14      var CN_EIGHT = "捌";
 15      var CN_NINE = "玖";
 16      var CN_TEN = "拾";
 17      var CN_HUNDRED = "佰";
 18      var CN_THOUSAND = "仟";
 19      var CN_TEN_THOUSAND = "万";
 20      var CN_HUNDRED_MILLION = "亿";
 21      var CN_SYMBOL = "人民币";
 22      var CN_DOLLAR = "元";
 23      var CN_TEN_CENT = "角";
 24      var CN_CENT = "分";
 25      var CN_INTEGER = "整";
 26       */
 27 
 28      var CN_ZERO = "零";
 29      var CN_ONE = "一";
 30      var CN_TWO = "二";
 31      var CN_THREE = "三";
 32      var CN_FOUR = "四";
 33      var CN_FIVE = "五";
 34      var CN_SIX = "六";
 35      var CN_SEVEN = "七";
 36      var CN_EIGHT = "八";
 37      var CN_NINE = "九";
 38      var CN_TEN = "十";
 39      var CN_HUNDRED = "百";
 40      var CN_THOUSAND = "千";
 41      var CN_TEN_THOUSAND = "万";
 42      var CN_HUNDRED_MILLION = "亿";
 43      var CN_SYMBOL = "人民币";
 44      var CN_DOLLAR = "元";
 45      var CN_TEN_CENT = "角";
 46      var CN_CENT = "分";
 47      var CN_INTEGER = "整";
 48 
 49      // Variables: 
 50       var integral;
 51      // Represent integral part of digit number.
 52       var decimal;
 53      // Represent decimal part of digit number.
 54       var outputCharacters;
 55      // The output result. 
 56       var parts;
 57      var digits, radices, bigRadices, decimals;
 58      var zeroCount;
 59      var i, p, d;
 60      var quotient, modulus;
 61      // Validate input string:
 62      currencyDigits = currencyDigits.toString();
 63      if (currencyDigits == "") { alert("Empty input!");  return ""; }
 64      if (currencyDigits.match(/[^,.\d]/) !=  null) { alert("Invalid characters in the input string!");  return ""; }
 65      if ((currencyDigits).match(/^((\d{1,3}(,\d{3})*(.((\d{3},)*\d{1,3}))?)|(\d+(.\d+)?))$/) ==  null) { alert("Illegal format of digit number!");  return ""; }
 66      // Normalize the format of input digits:
 67      currencyDigits = currencyDigits.replace(/,/g, "");
 68      // Remove comma delimiters.
 69      currencyDigits = currencyDigits.replace(/^0+/, "");
 70      // Trim zeros at the beginning.//Assert the number is not greater than the maximum number. 
 71       if (Number(currencyDigits) > MAXIMUM_NUMBER) { alert("Too large a number to convert!");  return ""; }
 72      // Process the coversion from currency digits to characters:
 73       // Separate integral and decimal parts before processing coversion:
 74      parts = currencyDigits.split(".");
 75      if (parts.length > 1) {
 76         integral = parts[0]; decimal = parts[1];
 77          // Cut down redundant decimal digits that are after the second.
 78          decimal = decimal.substr(0, 2);
 79     }  else { integral = parts[0]; decimal = ""; }
 80      // Prepare the characters corresponding to the digits:
 81      digits =  new Array(CN_ZERO, CN_ONE, CN_TWO, CN_THREE, CN_FOUR, CN_FIVE, CN_SIX, CN_SEVEN, CN_EIGHT, CN_NINE);
 82     radices =  new Array("", CN_TEN, CN_HUNDRED, CN_THOUSAND);
 83     bigRadices =  new Array("", CN_TEN_THOUSAND, CN_HUNDRED_MILLION);
 84     decimals =  new Array(CN_TEN_CENT, CN_CENT);
 85      // Start processing:
 86      outputCharacters = "";
 87      // Process integral part if it is larger than 0:
 88       if (Number(integral) > 0) {
 89         zeroCount = 0;  for (i = 0; i < integral.length; i++) {
 90             p = integral.length - i - 1; d = integral.substr(i, 1); quotient = p / 4; modulus = p % 4;  if (d == "0") { zeroCount++; }
 91              else {
 92                  if (zeroCount > 0) { outputCharacters += digits[0]; } zeroCount = 0; outputCharacters += digits[Number(d)] + radices[modulus];
 93             }
 94              if (modulus == 0 && zeroCount < 4) { outputCharacters += bigRadices[quotient]; }
 95         }
 96         outputCharacters += CN_DOLLAR;
 97     }
 98      // Process decimal part if there is:
 99       if (decimal != "") {
100          for (i = 0; i < decimal.length; i++) {
101             d = decimal.substr(i, 1);
102              if (d != "0") { outputCharacters += digits[Number(d)] + decimals[i]; } 
103         } 
104     }
105      // Confirm and return the final output string: 
106       if (outputCharacters == "") { outputCharacters = CN_ZERO + CN_DOLLAR; }
107      if (decimal == "") { outputCharacters += CN_INTEGER; }
108     outputCharacters =CN_SYMBOL + "   " + outputCharacters;
109      return outputCharacters;
110 }
View Code

转载于:https://www.cnblogs.com/cnblongs/p/3964161.html

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐