用js將數字轉中文

題目

  • 實現一個 numberTranToCN 函數
  • 好比 numberTranToCN(12345),輸出 一萬兩千三百四十五;
  • 好比 numberTranToCN(1000003),輸出 一百萬零三;
/*
            解題思路:將數字每四個拆分一次,每次後面加萬,億,萬億,億億做爲節權位
            而後單獨將每四個數按狀況轉化爲漢字,其餘狀況按下標便可轉化,主要考慮爲0的狀況,
            當零爲後面出現時,直接去除,當在兩個大於零的數字中間出現時,將多個零合併爲一個零
        */
        let numChar=['零','一','二','三','四','五','六','七','八','九']
        let numUnit=['','十','百','千']         //權位
        let numSection=['','萬','億','萬億','億億']     //節權位
        formatSection=(num)=>{    
            let arr=(num+'').split('').reverse();
            let str=''
            for(let i=0;i<arr.length;i++){          //將0-9轉化爲零到九
                let char=arr[i]==0?numChar[0]:numChar[arr[i]]+numUnit[i]   //當數字爲0時不加權位,非零加權位 
                str=char+str;
            }
            let s=str.replace(/零+/g,'零').replace(/零+$/,'')       //將多個零合併爲一個零,並剔除尾端的零
            return s;
        }
        formatNum=(num,str)=>{      //將字符串按個數拆分
            let len=Math.ceil(str.length/num);
            let arr=[]
            for(let i=0;i<len;i++){
                let reverseStr=str.split('').reverse().join('')
                let s=reverseStr.slice(i*num,i*num+num).split('').reverse().join('')
                arr.unshift(s)
            }
            return arr
        }
        numberTranToCN=(num)=>{
            let arr=formatNum(4,num+'')         //將數字每四個拆分一次
            let list=[]
            for(let i=0;i<arr.length;i++){
                let str=formatSection(arr[i])
                list.push(str)
                
            }
            let reverseList=list.reverse();
            for(let j=0;j<reverseList.length;j++){
                reverseList[j]+=numSection[j]
            }
            return reverseList.reverse().join('')
        }
        let str=numberTranToCN(12004004002)
        console.log(str)
複製代碼
相關文章
相關標籤/搜索