本帖最后由 pansy5 于 2010-12-09 10:09:38 编辑

解决方案 »

  1.   

    楼主的是vbscript程序不过代码太长,看不下去
      

  2.   

    好恶心的 switch case,呵呵英文中金额的阅读方式与中文不同,原来的代码似乎是针对英文设计的,
    如果需要中文方式的金额阅读,就需要认真分析,而不是匆忙滴修改代码!
      

  3.   


    问问楼主 这样的 switch case怎么改的好看些
    我也觉得恶心
    但是每次写都只能这么写 找不出什么好方式
      

  4.   

       <script>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)*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]
    }function aNumber(num)
    {
    var numArray = new Array()
    var unit = "亿万圆$"
    for (var i=0; i<unit.length; i++)
    {
    var re = eval("/"+ (numArray[i-1] ? unit.charAt(i-1) : "") +"(.*)"+unit.charAt(i)+"/")
    if (num.match(re))
    {
    numArray[i] = num.match(re)[1].replace(/^拾/, "壹拾")
    numArray[i] = numArray[i].replace(/[零壹贰叁肆伍陆柒捌玖]/g, function ($1)
    {
    return "零壹贰叁肆伍陆柒捌玖".indexOf($1)
    })
    numArray[i] = numArray[i].replace(/[分角拾佰仟]/g, function ($1)
    {
    return "*"+Math.pow(10, "分角 拾佰仟 ".indexOf($1)-2)+"+"
    }).replace(/^\*|\+$/g, "").replace(/整/, "0")
    numArray[i] = "(" + numArray[i] + ")*"+Math.ceil(Math.pow(10, (2-i)*4))
    }
    else numArray[i] = 0
    }
    return eval(numArray.join("+"))
    }
    </script>
    <!--onkeypress="regInput(event,/^\d{0,12} (\. \d{0,2})?$/)"-->
    <input id=up size=60 ><button onclick="lw.value = chineseNumber(up.value)">转为大写</button><br>
    <input id=lw size=60 value="壹仟壹佰壹拾壹圆整"><button onclick="up.value = aNumber(lw.value)">转为小写</button> 
      

  5.   

    不好意思,昨天临时有事没写完,今天补上,几乎完成了,
    lz 须要自己重新录音,代码简单修改就可以用了L@_@K<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
     <head>
      <title>ParseChineseFigureAmountStringIntoChineseWords</title>
      <meta name="generator" content="editplus" />
      <meta name="author" content="" />
      <meta name="keywords" content="" />
      <meta name="description" content="" />
     </head> <body>
      <script type="text/javascript">
      <!--
    String.Empty = "";
    String.prototype.Trim = function() {
        return this.replace(/(^\s+)|(\s+$)/g, String.Empty);
    };String.prototype.TrimChar = function(trimedChar) {
        var reg = new RegExp("(^" + trimedChar + "+)|(" + trimedChar + "+$)", "g");
        return this.replace(reg, String.Empty);
    };
    String.prototype.RightTrimChar = function(trimedChar) {
        var reg = new RegExp(trimedChar + "+$", "g");
        return this.replace(reg, String.Empty);
    };
    String.prototype.LeftTrimChar = function(trimedChar) {
        var reg = new RegExp("^" + trimedChar + "+", "g");
        return this.replace(reg, String.Empty);
    };String.prototype.IsEndWith = function(endString) {
        var reg = new RegExp(endString + "+$", "g");
        return reg.test(this);
    };function ParseAmountStringIntoChineseWords(amountString)
    {
        var figureString = GetFigureStringFromAmountString(amountString);    if (figureString == null)
            throw new Error("输入金额文本格式非法!");    // head.tail
        var figureParts = figureString.split(".");
        var headPart = figureParts[0];
        var tailPart = null;
        if (figureParts.length > 1)
            tailPart = figureParts[1];    var headString = GetHeadStringByHeadPart(headPart);
        var tailString = GetTailStringByTailPart(tailPart);    return JoinHeadStringAndTailString(headString, tailString);
    }function JoinHeadStringAndTailString(headString, tailString)
    {
        var result = String.Empty;    if (headString != String.Empty 
            && tailString == String.Empty)
            result = headString + "整";
        else if (headString == String.Empty 
            && tailString != String.Empty)
            result = tailString.LeftTrimChar('零');
        else
            result = headString + tailString;
        
        return result;
    }
    function GetFigureStringFromAmountString(amountString)
    {
        amountString = amountString.Trim();
        var amountReg = /^¥(\d+(\.(\d+))?)/;    if (amountReg.test(amountString))
            return amountString.match(amountReg)[1].Trim();
        else
            return null;
    }function GetHeadStringByHeadPart(headPart)
    {
        var headFullUnits = ["元","拾","百","千","万","拾","百","千","亿","拾","百","千","万"];
        var yuanUnit = headFullUnits[0];
        var headString = ParseFigureStringIntoChineseWords(headPart, headFullUnits);    headString = headString.TrimChar('零');    if (headString != String.Empty
            && !headString.IsEndWith(yuanUnit))
            headString += yuanUnit;    return headString;
    }function GetTailStringByTailPart(tailPart)
    {
        var tailFullUnits = ["分","角"];
        var tailString = ParseFigureStringIntoChineseWords(tailPart, tailFullUnits);    tailString = tailString.RightTrimChar('零');    return tailString;
    }function ParseFigureStringIntoChineseWords(figureString, unitArray)
    {
        var chineseWords = String.Empty;    if (figureString != null && figureString != String.Empty)
        {
            var usedUnits = GetMatchingUnitsOfFigures(unitArray, figureString);        var chineseNumbers = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"];
            var figures = figureString.split(String.Empty);        for (var i=0; i<figures.length; i++)
            {
                chineseWords += chineseNumbers[parseInt(figures[i])];            if (figures[i] != "0")
                    chineseWords += usedUnits[i];
            }        chineseWords = ReplaceMultipleChineseZeroWordsWithSingle(chineseWords);
        }    return chineseWords;
    }function GetMatchingUnitsOfFigures(unitArray, figureString)
    {
        return unitArray.slice(0, figureString.length).reverse();
    }
    function ReplaceMultipleChineseZeroWordsWithSingle(chineseWords)
    {
        return chineseWords.replace(/零{2,}/g, "零");
    }
    // -----------------------------------------------
    // Test
    // -----------------------------------------------function TestAndShowOutput(amountString)
    {
        var Sounder = {};
        Sounder["零"] = "0.wav";
        Sounder["壹"] = "1.wav";
        Sounder["贰"] = "2.wav";
        Sounder["叁"] = "3.wav";
        Sounder["肆"] = "4.wav";
        Sounder["伍"] = "5.wav";
        Sounder["陆"] = "6.wav";
        Sounder["柒"] = "7.wav";
        Sounder["捌"] = "8.wav";
        Sounder["玖"] = "9.wav";    Sounder["分"] = "fen.wav";
        Sounder["角"] = "jiao.wav";
        Sounder["元"] = "yuan.wav";
        Sounder["整"] = "zheng.wav";
        Sounder["拾"] = "shi.wav";
        Sounder["百"] = "bai.wav";
        Sounder["千"] = "qian.wav";
        Sounder["万"] = "wan.wav";
        Sounder["亿"] = "yi.wav";    document.write(amountString, ": ");
        var chineseWords = ParseAmountStringIntoChineseWords(amountString);
        document.write(chineseWords);    if (chineseWords != String.Empty)
        {
            var speeches = chineseWords.split(String.Empty);
            for (var i=0; i<speeches.length; i++)
                speeches[i] = Sounder[speeches[i]];
            document.write("; Pronounce: ", speeches.join("-"));
        }
        
        document.write("<br />");
    }
    TestAndShowOutput("¥10203");
    TestAndShowOutput("¥10200");
    TestAndShowOutput("¥10003");
    TestAndShowOutput("¥10000");
    TestAndShowOutput("¥0.40");
    TestAndShowOutput("¥0.45");
    TestAndShowOutput("¥0.05");
    TestAndShowOutput("¥10203.40");
    TestAndShowOutput("¥10200.40");
    TestAndShowOutput("¥10203.00");
    TestAndShowOutput("¥0.00");/*
    ¥10203: 壹万零贰百零叁元整; Pronounce: 1.wav-wan.wav-0.wav-2.wav-bai.wav-0.wav-3.wav-yuan.wav-zheng.wav
    ¥10200: 壹万零贰百元整; Pronounce: 1.wav-wan.wav-0.wav-2.wav-bai.wav-yuan.wav-zheng.wav
    ¥10003: 壹万零叁元整; Pronounce: 1.wav-wan.wav-0.wav-3.wav-yuan.wav-zheng.wav
    ¥10000: 壹万元整; Pronounce: 1.wav-wan.wav-yuan.wav-zheng.wav
    ¥0.40: 肆角; Pronounce: 4.wav-jiao.wav
    ¥0.45: 肆角伍分; Pronounce: 4.wav-jiao.wav-5.wav-fen.wav
    ¥0.05: 伍分; Pronounce: 5.wav-fen.wav
    ¥10203.40: 壹万零贰百零叁元肆角; Pronounce: 1.wav-wan.wav-0.wav-2.wav-bai.wav-0.wav-3.wav-yuan.wav-4.wav-jiao.wav
    ¥10200.40: 壹万零贰百元肆角; Pronounce: 1.wav-wan.wav-0.wav-2.wav-bai.wav-yuan.wav-4.wav-jiao.wav
    ¥10203.00: 壹万零贰百零叁元整; Pronounce: 1.wav-wan.wav-0.wav-2.wav-bai.wav-0.wav-3.wav-yuan.wav-zheng.wav
    ¥0.00:  
    */
      //-->
      </script>
     </body>
    </html>