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