今天在博客园上看到了有人贴了 人民币大写转化函数(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( 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];
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 >
< 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( 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];
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 >