Web前端之路

js实现金额转大写

2021-01-20  本文已影响0人  wenronnie

考虑到整数位最多12位,小数位最多2位的情况


function cashToChinese(cash) {
    var digits=['零','壹','贰','叁','肆','伍','陆','柒','捌','玖'];
    var largeUnits=['元','万','亿'];
    var units=['','拾','佰','仟'];
    var fractions=['角','分'];
    let cStr='';
    cash=cash.toString();
    if(cash===''||cash===undefined||cash===null){
        return cStr;
    }
    let preCash=cash.split('.')[0]||'';
    let lastCash=cash.split('.')[1]||'00';
    if(preCash.length>12||lastCash.length>2){
        return cStr;
    }
    //遍历小数位
    for(let i=0;i<fractions.length;i++){
        cStr+=(digits[lastCash.charAt(i)]+fractions[i]).replace(/零./,'');
    }
    cStr=cStr||'整';
    //遍历整数位,用str来记录每4位的值
    for(let i=preCash.length-1,n=0,str='';i>=0;i--){
        let largeUnit='';
        str=(digits[preCash[i]]+units[n%4])+str;
        //用n计数每隔4位,或者遍历到头的时候加单位('元','万','亿')
        if((n+1)%4===0||i===0){
            largeUnit=largeUnits[Math.floor(n/4)];
            //考虑替换末位全是0时替换位空 或者中间连续0时替换为零
            str=str.replace(/(零.)*零$/g,'').replace(/(零.)+/g,'零');
            str+=largeUnit;
            cStr=str+cStr;
            str='';
        }
        n++;
    }
    //考虑处理('元','万','亿')单位前为10的情况,和整数位为0的情况
    return cStr.replace(/壹拾(.){0,1}([元|万|亿])/g,'拾$1$2').replace(/^元/,'');
}

上一篇 下一篇

猜你喜欢

热点阅读