2018-10-11 · Develop

Js实现金额转换为中文繁体

在工作中经常会遇到需要将金额转换成繁体数组进行展示的情况,这个转换的过程可以后台进行也可以在前端进行。
本文使用 JavaScript 将金额数字转换成中文繁体,废话不多说直接上代码:

/**
 * 将给定的金额数值转换为中文繁体的方法,
 *  最大值为'兆'的的数值,不为负数
 * @author zuojl
 * @version 2016.05.04 v1.0
 * @param money 传入的金额数值
 * @return result 当返回的不是'ERROR'时,
 *  返回的是转换后的金额中文值
 */
var _moneyToChinese = function(money){
    //判断是否为数字,不是返回'ERROR'
    var pattern = /^\d+(.\d{1,2})?$/;
    //匹配0,小数,负数:/^(0|-?[1-9][0-9]*)(.[0-9]{1,2})?$/
    //匹配100,100的格式:/^(0|((-?[1-9][0-9]{1,2})(,[0-9]{3})*|(0|-?[1-9][0-9]*))(.[0-9]{1,2})?)$/
    if(money == '' || !pattern.test(money)){
        return 'ERROR!';
    }
    money += '';
    var s1 = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');//存储数值部分
    var s2 = new Array('分', '角', '圆', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟', '万', '亿', '兆');//存储单位部分
    //将money字符串转化为分
    var str;//用来存储转化为分的字符串
    var result = '';//用来存储
    var index = money.lastIndexOf(".");
    if(index != -1){
        var temp = money.substring(index + 1);
        var len = temp.length;
        if(len > 2){
            len = 2;
            temp = temp.substring(0, 2);
        }
        for(var i = 0; i < 2 - len; i++){
            temp += '0';
        }
        str = money.substring(0, index) + temp;
    } else {
        str = money + '00';
    }
    /*
     * 将分的每一位数字取出
     * 将其与数值和单位部分进行匹配
     * 组合成转换后的金额
     */
    for (i = 0; i < str.length; i++) {
        var n = str.charAt(str.length - 1 - i);
        result = s1[n] + "" + s2[i] + result;
    }
    /*
     * 通过正则优化
     */
    //优化有零的
    result = result.replace(/零分/g, "零");
    result = result.replace(/零角/g, "零");
    result = result.replace(/零圆/g, "零");
    result = result.replace(/零拾/g, "零");
    result = result.replace(/零佰/g, "零");
    result = result.replace(/零仟/g, "零");
    result = result.replace(/零万/g, "零");
    result = result.replace(/零亿/g, "零");
    //优化多个相连的零
    result = result.replace(/零零/g, "零");
    //优化以零结尾的
    result = result.replace(/零$/, "");
    //优化整元
    result = result.replace(/圆$/, "圆整");
    result = result.replace(/零圆$/, "零圆整");
    return result;
};

实现的代码也是非常的简单,将数字数组中的每个字符替换成汉族后,使用正则替换的方式进行优化。