js实现金额转大写

考虑到整数位最多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(/^元/,'');
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容