function fBink(i){
var money = document.getElementById("txtMoney").value;
var a = money.length-i-1;
switch(a)
{
case 0: return "元整";
case 1: return "拾";
case 2: return "佰";
case 3: return "仟";
case 4: return "萬";
case 5: return "拾萬";
case 6: return "佰萬"; 
case 7: return "仟萬"; 
case 8: return "亿";
}
}

function fConvert(){
var money = document.getElementById("txtMoney").value;
if(isNaN(money)){
alert("请输入数字。");
}else if(money.length>8){
alert("你输入的数字太大。");
}else{
var result = "";
for(var i=0;i<money.length;i++){
switch(money.charAt(i))
{
case '0': result = result + "零" + fBink(i); break ;
case '1': result = result + "壹" + fBink(i); break ;
case '2': result = result + "贰" + fBink(i); break ;
case '3': result = result + "叁" + fBink(i); break ;
case '4': result = result + "肆" + fBink(i); break ;
case '5': result = result + "伍" + fBink(i); break ;
case '6': result = result + "陆" + fBink(i); break ;
case '7': result = result + "柒" + fBink(i); break ;
case '8': result = result + "捌" + fBink(i); break ;
case '9': result = result + "玖" + fBink(i); break ;
}
}
document.getElementById("convertMoney").innerHTML=result;
}
}这是我写的简单版。
但是没对零处理,麻烦各位帮我看看

解决方案 »

  1.   


    //给你个C# 后台实现的 正则
    //你看看 修改成js即可
    void Main()
    {
     
      Console.WriteLine("{0,14:N2}: {1}", 102, ConvertToChinese(102));

    }
     static string ConvertToChinese(double x)
      {
    string s = x.ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");
    string d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$))))", "${b}${z}");
    return Regex.Replace(d, ".", delegate(Match m) { return "负元空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟萬億兆京垓秭穰"[m.Value[0] - '-'].ToString(); });
      }
      

  2.   

    trying to<script type="text/javascript">
    String.prototype.toUpcaser = function() {
           if(!/^\d{1,9}$/g.test(this)){return "请重新输入1-9位纯数字!"}
           var i = 0, str = (this >>> 0) + "", l = str.length,
           arr = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"],
           aro = ["亿","仟","佰","拾","萬","仟","佰","拾","元整"].slice(-l),
           str = str.replace(/\d/g, function($) {return arr[$] + aro[i++]});
           return str.replace(/零[仟佰拾]/g, "零").replace(/(?!^.{3}$)零(萬|元)/g, "$1")
    }
    alert("154354528".toUpcaser());
    alert("004354528".toUpcaser());alert("104300528".toUpcaser());
    alert("100300028".toUpcaser());
    alert("104300520".toUpcaser());alert("".toUpcaser());
    alert("1543545289".toUpcaser());
    </script>var money = document.getElementById("txtMoney").value;
    document.getElementById("convertMoney").innerHTML=money.toUpcaser()
      

  3.   

    /**
         * 人民币转成大写
         * 
         * @param value
         * @return String
         */
        public static String hangeToBig(double value)
        {
            char[] hunit = { '拾', '佰', '仟' }; // 段内位置表示
            char[] vunit = { '万', '亿' }; // 段名表示
            char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 数字表示
            long midVal = (long) (value * 100); // 转化成整形
            String valStr = String.valueOf(midVal); // 转化成字符串        String head = valStr.substring(0, valStr.length() - 2); // 取整数部分
            String rail = valStr.substring(valStr.length() - 2); // 取小数部分        String prefix = ""; // 整数部分转化的结果
            String suffix = ""; // 小数部分转化的结果
            // 处理小数点后面的数
            if (rail.equals("00"))
            { // 如果小数部分为0
                suffix = "整";
            }
            else
            {
                suffix = digit[rail.charAt(0) - '0'] + "角" + digit[rail.charAt(1) - '0'] + "分"; // 否则把角分转化出来
            }
            // 处理小数点前面的数
            char[] chDig = head.toCharArray(); // 把整数部分转化成字符数组
            char zero = '0'; // 标志'0'表示出现过0
            byte zeroSerNum = 0; // 连续出现0的次数
            for (int i = 0; i < chDig.length; i++)
            { // 循环处理每个数字
                int idx = (chDig.length - i - 1) % 4; // 取段内位置
                int vidx = (chDig.length - i - 1) / 4; // 取段位置
                if (chDig[i] == '0')
                { // 如果当前字符是0
                    zeroSerNum++; // 连续0次数递增
                    if (zero == '0')
                    { // 标志
                        zero = digit[0];
                    }
                    else if (idx == 0 && vidx > 0 && zeroSerNum < 4)
                    {
                        prefix += vunit[vidx - 1];
                        zero = '0';
                    }
                    continue;
                }
                zeroSerNum = 0; // 连续0次数清零
                if (zero != '0')
                { // 如果标志不为0,则加上,例如万,亿什么的
                    prefix += zero;
                    zero = '0';
                }
                prefix += digit[chDig[i] - '0']; // 转化该数字表示
                if (idx > 0)
                    prefix += hunit[idx - 1];
                if (idx == 0 && vidx > 0)
                {
                    prefix += vunit[vidx - 1]; // 段结束位置应该加上段名如万,亿
                }
            }        if (prefix.length() > 0)
                prefix += '圆'; // 如果整数部分存在,则有圆的字样
            return prefix + suffix; // 返回正确表示
        }
    这是JAVA版的,可以参考!
      

  4.   

    str = (this >>> 0) + ……
    这个干嘛右移0位???
      

  5.   


    这个太精髓了.可以写成this-0
    这样就容易看懂 哈哈
      

  6.   

    JAVA版的有问题,100000.00会出错。public static String hangeToBig(double value) {
    char[] hunit = { '拾', '佰', '仟' }; // 段内位置表示
    char[] vunit = { '万', '亿' }; // 段名表示
    char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 数字表示

    long midVal = (long) (value * 100); // 转化成整形
    String valStr = String.valueOf(midVal); // 转化成字符串 String head = valStr.substring(0, valStr.length() - 2); // 取整数部分
    String rail = valStr.substring(valStr.length() - 2); // 取小数部分 String prefix = ""; // 整数部分转化的结果
    String suffix = ""; // 小数部分转化的结果

    // 处理小数点后面的数
    if (rail.equals("00")) { // 如果小数部分为0
    suffix = "整";
    } else {
    suffix = digit[rail.charAt(0) - '0'] + "角" + digit[rail.charAt(1) - '0'] + "分"; // 否则把角分转化出来
    }
    // 处理小数点前面的数
    char[] chDig = head.toCharArray(); // 把整数部分转化成字符数组
    char zero = '0'; // 标志'0'表示出现过0
    byte zeroSerNum = 0; // 连续出现0的次数

    for (int i = 0; i < chDig.length; i++) { // 循环处理每个数字
    int idx = (chDig.length - i - 1) % 4; // 取段内位置
    int vidx = (chDig.length - i - 1) / 4; // 取段位置

    if (chDig[i] == '0') { // 如果当前字符是0
    zeroSerNum++; // 连续0次数递增
    if (zero == '0') { // 标志
    zero = digit[0];

    if (idx == 0 && vidx > 0 && zeroSerNum < 4) {
    prefix += vunit[vidx - 1];
    zero = '0';
    }
    continue;

    }

    zeroSerNum = 0; // 连续0次数清零
    if (zero != '0') { // 如果标志不为0,则加上,例如万,亿什么的
    prefix += zero;
    zero = '0';
    }
    prefix += digit[chDig[i] - '0']; // 转化该数字表示
    if (idx > 0){
    prefix += hunit[idx - 1];
    }
    if (idx == 0 && vidx > 0) {
    prefix += vunit[vidx - 1]; // 段结束位置应该加上段名如万,亿
    }
    } if (prefix.length() > 0){
    prefix += '圆'; // 如果整数部分存在,则有圆的字样
    }
    return prefix + suffix; // 返回正确表示
    }
      

  7.   

    非常强悍的代码,收下了,有点小瑕疵.
    例如: 100003,这样还是有零问题稍微改下return str.replace(/零[仟佰拾]/g, "零").replace(/零{2,}/g,'零').replace(/(?!^.{3}$)零(萬|元)/g, "$1")