场景描述

完成将 toChineseNum, 可以将数字转换成中文大写的表示,处理到万级别,例如 toChineseNum(12345),返回 一万二千三百四十五。

思路解析:

  • 零到九的汉字索引数组
  • 个十百千万的计量单位
  • 数字转为字符串解析,每个十进制有单独的数字表示
  • 对零的处理,重复多个零只读一个,后面无数字的省略零
  • 对超出万计量的重新按照千百十的计量
  1. const toChineseNum = (num) => {
  2. let dtext=['','十','百','千','万']
  3. let len=num.toString().length
  4. let numArr=num.toString().split('')
  5. let numTxt=''
  6. const toT=(numIndex)=>{
  7. const arr=['零','一','二','三','四','五','六','七','八','九']
  8. return arr[numIndex]
  9. }
  10. for(let i=1;i<=len;i++){
  11. if(len>5&&i<(len-3)){
  12. if(i==(len-4)){
  13. numTxt+=numArr[i-1]==0?'':toT(numArr[i-1])
  14. numTxt+='万'
  15. }else{
  16. if((numArr[i-2]==0&&numArr[i-1]==0)||((numArr[i-1]==0)&&(numArr[len-5]==0)&&numArr[i]==0)){
  17. numTxt+=''
  18. }else{
  19. numTxt+=(((numArr[i-1]==0)&&(numArr[len-5]!=0))||(numArr[i]!=0&&numArr[i-1]==0))?'零':(toT(numArr[i-1])+dtext[len-i-4])
  20. }
  21. }}else{
  22. if((numArr[i-1]==0&&i==len)||(numArr[i]==0&&numArr[i-1]==0)){
  23. numTxt+=''
  24. }else{
  25. numTxt+=numArr[i-1]==0?'零':(toT(numArr[i-1])+dtext[len-i])
  26. }
  27. }}
  28. return numTxt
  29. }

codepen地址