今天在博客园上看到了有人贴了 人民币大写转化函数(C#版) ,于是也顺便把自己以前的写的JavaScript版的转换函数贴出来,相互参考和学习一下。

该函数完成如下功能:

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

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

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

4、最大转换能到百亿


下面是运行效果:


具体的代码如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
    
<head>
        
<title></title>
        
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
        
<meta content="VisualStudio.HTML" name="ProgId">
        
<meta content="Microsoft Visual Studio .NET 7.1" name="Originator">
        
<script language="jscript">
/*****************************************
     Copyright (c) 2004, Laser Lu      
          http://www.idow.net           
 ****************************************
*/
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(02);
    }
    
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];
                zeroCount = 0;
            }
        }
        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>
posted on 2005-03-30 12:08  Laser.NET  阅读(10222)  评论(14编辑  收藏  举报
无觅相关文章插件,快速提升流量