• 首页
  • 小学语文
  • 中学语文
  • 中学英语
  • 免费论文
  • 教学随笔
  • 学生作文
  • 综合考试
  • 试题教案
  • 育儿话题
  • 教学资源
  • 编程技术
  • 博客
  • 将人民币数字转换成大写形式

    日期:2003-03-08  地址:  作者:

    用JavaScript编写了一功能函数,完成如下功能:

    1、对一给定字符串,如:1234.55,转换成正确的中文货币描述:如:人民币壹仟贰佰叁拾四元五角五分

    2、输入的字符串形式可以是以下几种:带分隔符的,如:123,456,789.00;不带分隔符的,如:123456789

    3、输出的中文货币描述要符合规范,如:0.3----人民币三角;0.33----人民币三角三分;1----人民币壹元整
       100----人民币壹佰元整;1001----人民币壹仟零壹元整;10000001----人民币壹仟万零壹元整;
       1001001----人民币壹仟零壹万零壹元整,等

    4、最大转换能到百亿

    具体的代码如下:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
     <head>
      <title></title>
      <script language="jscript">
    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;
    }
      </script>
     </head>
     <body>
      <INPUT id="Digits" type="text" name="Digits" size=20>
      <INPUT id="Convert" type="button" value="Convert" name="Convert" onclick="Result.value = convertCurrency(Digits.value);">
      <INPUT id="Result" type="text" name="Result" size=60>
     </body>
    </html>

    以上代码运用了正则表达式的功能,除了可以正确的转换成人民币的大写形式以外,还可以判断输入的形式是否正确有效。

    对 将人民币数字转换成大写形式 文章的评论    [查看网友评论]

    验证码:
    匿名发表: