//你的pascal代码也太长了吧,为什么不优化一下呢?
//下面代码将一个小于10000的金额转换为银行形式
//westfly(原创于2001-12-20 语言JavaScript)
function floatToRMB(f)
{
var sNumberMap="零壹贰叁肆伍陆柒捌玖";
var sBitMap="分角元拾佰仟"; // 假定金额不超过9999.99元
var sDigits=Math.floor(Math.abs(f*100)).toString();
var iLen=sDigits.length;
var sRet='';
for(var i=0;i<iLen;i++)
{
sRet+=sNumberMap.charAt(parseInt(sDigits.charAt(i)))+sBitMap.charAt(iLen-i-1);
}
if(f<0)sRet='负'+sRet;
sRet=sRet.replace('零角零分','整');
return sRet;
}
//下面代码将一个小于10000的金额转换为银行形式
//westfly(原创于2001-12-20 语言JavaScript)
function floatToRMB(f)
{
var sNumberMap="零壹贰叁肆伍陆柒捌玖";
var sBitMap="分角元拾佰仟"; // 假定金额不超过9999.99元
var sDigits=Math.floor(Math.abs(f*100)).toString();
var iLen=sDigits.length;
var sRet='';
for(var i=0;i<iLen;i++)
{
sRet+=sNumberMap.charAt(parseInt(sDigits.charAt(i)))+sBitMap.charAt(iLen-i-1);
}
if(f<0)sRet='负'+sRet;
sRet=sRet.replace('零角零分','整');
return sRet;
}
//下面代码将一个小于10的17次方的金额转换为银行形式
//bestext(原创于2001-12-22 语言JavaScript)
//下面代码将一个小于等于四位数的整数金额转换为银行形式
function SmallToRMB(n1)
{
sNum = "零壹贰叁肆伍陆柒捌玖";
sBit1 = new Array('仟','佰','拾','');
n1 = "0000"+n1;
n1 = n1.substring(n1.length-4,n1.length);
smallstr = "";
for (i=0;i<4;i++)
smallstr += sNum.charAt(n1.charAt(i)) + sBit1[i];
smallstr = smallstr.replace('零仟','零');
smallstr = smallstr.replace('零佰','零');
smallstr = smallstr.replace('零拾','零');
smallstr = smallstr.replace('零零零','零');
smallstr = smallstr.replace('零零','零');
return smallstr;
}//下面代码将一个大于四位数的整数金额转换为银行形式
function BigToRMB(n2)
{
sBit2 = new Array('元','万','亿','万');
n2 = n2 + "";
len = n2.length;
if (len <5) return (SmallToRMB(n2)+"元").replace('零元','元');
bigstr = "";
j = 0;
while (len > 4)
{
bigstr = SmallToRMB(n2.substring(len-4,len)) + sBit2[j] + bigstr;
len -= 4;
j ++;
}
bigstr = SmallToRMB(n2.substring(0,len)) + sBit2[j] + bigstr;
bigstr = bigstr.replace('零亿','亿');
bigstr = bigstr.replace('零万','万');
bigstr = bigstr.replace('零元','元');
bigstr = bigstr.replace('亿万','亿');
return bigstr;
}//下面代码将一个两位的小数金额转换为银行形式
function DecToRMB(n3)
{
sNum = "零壹贰叁肆伍陆柒捌玖";
decstr = sNum.charAt(n3.charAt(0)) + "角" + sNum.charAt(n3.charAt(1)) + "分";
decstr = decstr.replace('零角零分','整');
decstr = decstr.replace('零角','零');
decstr = decstr.replace('零分','');
return decstr;
}//下面代码将一个绝对值小于10的17次方的金额转换为银行形式
function NumToRMB(n4)
{
if (isNaN(n4)) return "非数字,无法转换!";
sign = (n4 < 0) ? "负" : "";
n4 = (n4 < 0) ? n4.substring(1,n4.length) : n4+"";
point = n4.indexOf('.');
if (point < 0) {
intStr = n4;
decStr = "00";
} else {
intStr = n4.substring(0,point);
decStr = n4.substring(point+1,n4.length);
decStr = (decStr+"00").substring(0,2);
}
if (intStr.length > 16) return "超出计算范围!";
str = BigToRMB(intStr) + DecToRMB(decStr);
if (str.charAt(0) == '零') str = str.substring(1,str.length);
return sign + str;
}</script><input type=text value="" id="num1" size=40><br>
<input type=text value="" id="num2" size=40><br>
<input type=button value="转换" onclick="num2.value=NumToRMB(num1.value)">
(宋 劭雍 皇极经世书 观物外篇下 以元经会大小运数第七)依此,数量单位看来是:一十百千万亿(10^8)兆(10^16)京(10^24)垓(10^32)秭(10^40)
以此为据,将函数BigToRMB略作改动即可转换小于10^49的数字到银行形式://hehe,天文数字……
function BigToRMB(n2)
{
sBit2 = new Array('元','万','亿','万','兆','万','京','万','垓','万','秭','万');
n2 = n2 + "";
len = n2.length;
if (len <5) return (SmallToRMB(n2)+"元").replace('零元','元');
bigstr = "";
j = 0;
while (len > 4)
{
bigstr = SmallToRMB(n2.substring(len-4,len)) + sBit2[j] + bigstr;
len -= 4;
j ++;
}
bigstr = SmallToRMB(n2.substring(0,len)) + sBit2[j] + bigstr; bigstr = bigstr.replace('零亿','亿');
bigstr = bigstr.replace('零万','万');
bigstr = bigstr.replace('零元','元');
bigstr = bigstr.replace('秭万','秭');
bigstr = bigstr.replace('垓万','垓');
bigstr = bigstr.replace('京万','京');
bigstr = bigstr.replace('兆万','兆');
bigstr = bigstr.replace('亿万','亿'); return bigstr;
}另外,要将函数NumToRMB中 if(intStr.length>16) 改为 if(intStr.length>48)……难道世上会有这么大一笔钱吗???
到 http://www.csdn.net/expert/topic/210/210470.shtm 领46分
再加上本帖的40,够意思吧。