今日在网上引用了一个js函数,是用于将阿拉伯数字金额转换为中文大写金额,如数字是100006012.05时,转换结果是:壹亿陆仟零壹拾贰元零五分,不过我们银行的会计人员说,正确必须是:壹亿零陆仟零壹拾贰元零五分!(亿之后多了一个“亿”字)
由于本人对js只是知道一些皮毛,请各位高手帮忙,解决这个问题,谢谢!js函数如下,请改好并标注改动部分,谢谢!<script language="javascript"> function chineseNumber(num) { if (isNaN(num) || num > Math.pow(10, 12)) return ""var cn = "零壹贰叁肆伍陆柒捌玖"var unit = new Array("拾百千", "分角") var unit1= new Array("万亿", "") var numArray = num.toString().split(".") var start = new Array(numArray[0].length-1, 2)   function toChinese(num, index) { var num = num.replace(/\d/g, function ($1) { return cn.charAt($1)+unit[index].charAt(start--%4 ? start%4 : -1) }) return num }   for (var i=0; i<numArray.length; i++) { var tmp = ""for (var j=0; j*4<numArray[i].length; j++) { var strIndex = numArray[i].length-(j+1)*4var str = numArray[i].substring(strIndex, strIndex+4) var start = i ? 2 : str.length-1var tmp1 = toChinese(str, i) tmp1 = tmp1.replace(/(零.)+/g, "零").replace(/零+$/, "") tmp1 = tmp1.replace(/^壹拾/, "拾") tmp = (tmp1+unit1[i].charAt(j-1)) + tmp } numArray[i] = tmp }       numArray[1] = numArray[1] ? numArray[1] : ""numArray[0] = numArray[0] ? numArray[0]+"元" : numArray[0], numArray[1] = numArray[1].replace(/^零+/, "零") numArray[1] = numArray[1].match(/分/) ? numArray[1] : numArray[1]+"整"return numArray[0]+numArray[1]   }   alert(chineseNumber(100006012.05)); </script>

解决方案 »

  1.   

    numArray[0] = numArray[0] ? numArray[0] + "元" :   numArray[0], numArray[1] = numArray[1].replace(/^零+/, "");把红色的删除。即:
    numArray[0] = numArray[0] ? numArray[0] + "元" :   numArray[0], numArray[1] = numArray[1].replace(/^零+/, "");
      

  2.   

    换一个例子,改了一下,可用
    function DX(n) { //金额大写转换函数
    if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n))
    return "数据非法";
    var unit = "千百拾亿千百拾万千百拾元角分", str = "";
    n += "00";
    var p = n.indexOf('.');
    if (p >= 0)
    n = n.substring(0, p) + n.substr(p+1, 2);
    unit = unit.substr(unit.length - n.length);
    for (var i=0; i < n.length; i++)
    str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i);
    return str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零万/g,"零").replace(/零(万|亿|元)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(/^元零?|零分/g, "").replace(/元$/g, "元整");
    }alert(DX(100006012.05));
      

  3.   


    to xzy21com :按你的方法,结果连“万”后面和小数点后面的“零”也不显示了!
    重新上传我这里最新最完整js代码,如下代码是按我们会计部门要求,经过多次修正后的,请大侠使用以下代码按题目要求给予修改测试,无尽感谢!
    题目要求是:如数字是100006012.05时,转换结果是:壹亿陆仟零壹拾贰元零五分,不过我们银行的会计人员说,正确必须是:壹亿零陆仟零壹拾贰元零五分!(亿之后要多了一个“零”字)<script language="javascript">
    function chineseNumber(num)  ///数字转换大写
    {
    if (isNaN(num) || num > Math.pow(10, 12)) return ""
    if (num==0) return "零元整"
    var cn = "零壹贰叁肆伍陆柒捌玖"
    var unit = new Array("拾佰仟", "分角")
    var unit1= new Array("万亿", "")
    var numArray = num.toString().split(".")
    var start = new Array(numArray[0].length-1, 2)function toChinese(num, index)
    {
    var num = num.replace(/\d/g, function ($1)
    {
    return cn.charAt($1)+unit[index].charAt(start--%4 ? start%4 : -1)
    })
    return num
    }for (var i=0; i<numArray.length; i++)
    {
    var tmp = ""
    for (var j=0; j*4<numArray[i].length; j++)
    {
    var strIndex = numArray[i].length-(j+1)*4
    var str = numArray[i].substring(strIndex, strIndex+4)
    var start = i ? 2 : str.length-1
    var tmp1 = toChinese(str, i)
    tmp1 = tmp1.replace(/(零.)+/g, "零").replace(/零+$/, "")
    //tmp1 = tmp1.replace(/^壹拾/, "拾")
    tmp = (tmp1+unit1[i].charAt(j-1)) + tmp
    }
    numArray[i] = tmp
    }numArray[1] = numArray[1] ? numArray[1] : ""
    numArray[0] = numArray[0] ? numArray[0]+"元" : numArray[0], numArray[1] //= numArray[1].replace(/^零+/, "")
    numArray[1] = numArray[1].match(/分/) ? numArray[1] : numArray[1]+"整"
    return (numArray[0]+numArray[1]).replace(/^零/,"").replace(/亿万/,"亿")}</script> 
      

  4.   


    死教条主义。
    把这行
    return (numArray[0]+numArray[1]).replace(/^零/,"").replace(/亿万/,"亿")
    给成就完事了
    return (numArray[0]+numArray[1]).replace(/^零/,"").replace(/亿万/,"亿零")
      

  5.   

    入个伙
    function parseChinese(n) {
    var c = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
    var p = ["分","角","元","拾","百","千","万","拾","百","千","亿","拾","百","千"];
    var temp = (/^(0|[1-9])\d*(\.\d+)?$/).test(n)? n : null;
    var i = -1;
    var result = null;
    if(temp) {
    temp = parseFloat(temp).toFixed(2);
    i = (/\.\d+$/).test(temp)? -1 : 1;
    result = temp.toString().replace(/\./g, "").split("").reverse().join("").replace(/\d/g, function(a) {i++; return p[i] + c[a]}).split("").reverse().join("").replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/(千|百|拾)零(元|万|亿)/g,"$1$2").replace(/(亿零)万/g, "$1").replace(/(万零)元/g, "$1").replace(/(零)+/g, "零").replace(/(亿)零(元)/g, "$1$2").replace(/元((零角)*零分|)$/g, "元整");
    }
    return result;
    }

    alert(parseChinese(100006012.05));