用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);