//你的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;
}

解决方案 »

  1.   

    先给westfly(西翔)预定50分,请大家继续讨论,继续加分。
      

  2.   

    其实可以转化无限大的数字,但是我不知数量词了<script language=JavaScript>
    //下面代码将一个小于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)">
      

  3.   

    “天统乎体,故八变而终于十六。地分乎用,故六变而终于十二。天起于一,而终于七秭九千五百八十六万六千一百一十垓九千九百四十六万四千八京八千四百三十九万一千九百三十六兆。地起于十二,而终于二百四垓六千九百八十万七千三百八十一京五千四百九十一万八千四百九十九兆七百二十万亿也。”
    (宋 劭雍 皇极经世书 观物外篇下 以元经会大小运数第七)依此,数量单位看来是:一十百千万亿(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)……难道世上会有这么大一笔钱吗???
      

  4.   

    请 bestext(bestext) 到 http://www.csdn.net/expert/topic/206/206435.shtm 领20分
                        到 http://www.csdn.net/expert/topic/210/210470.shtm 领46分
    再加上本帖的40,够意思吧。