Skip to content

将阿拉伯数字转换成汉语 #4

@JesseZhao1990

Description

@JesseZhao1990
/**
* 将一个数字转换成汉语
*/
function toChinese(num){
    num = num+"";
    var arr = num.split(".");
    if(arr.length>1){
      return zhengshu(arr[0])+xiaoshu(arr[1]);
    }else{
      return zhengshu(arr[0]);
    }
}
  
  
  /**
  * 处理整数,并返回整数的汉语
  */
  function zhengshu(zs){
    var zsStr = "";
    for(var i=zs.length-1;i>0;i--){
        var temp = "";
        var char = zs[i];
        switch(char){
            case "0" : temp = "零" + temp; break;
            case "1" : temp = "一" + temp; break;
            case "2" : temp = "二" + temp; break;
            case "3" : temp = "三" + temp; break;
            case "4" : temp = "四" + temp; break;
            case "5" : temp = "五" + temp; break;
            case "6" : temp = "六" + temp; break;
            case "7" : temp = "七" + temp; break;
            case "8" : temp = "八" + temp; break;
            case "9" : temp = "九" + temp; break;
        }

        switch (zs.length-1 - i){
            case 0 : temp = temp; break;
            case 1 : if (char != "0") temp = temp+"十"; break;
            case 2 : if (char != "0") temp = temp+"百"; break;
            case 3 : if (char != "0") temp = temp+"千"; break;
            case 4 : temp = temp+"万"; break;
            case 5 : if (char != "0") temp = temp+"十"; break;
            case 6 : if (char != "0") temp = temp+"百"; break;
            case 7 : if (char != "0") temp = temp+"千"; break;
            case 8 : temp = temp+"亿"; break;
            case 9 : if (char != "0") temp = temp+"十"; break;
            case 10 : if (char != "0") temp = temp+"百"; break;
            case 11 : if (char != "0") temp = temp+"千"; break;
            case 12 : temp = temp+"兆"; break;
            case 13 : if (char != "0") temp = temp+"十"; break;
            case 14 : if (char != "0") temp = temp+"百"; break;
            case 15 : if (char != "0") temp = temp+"千"; break;
        }
        zsStr = temp+zsStr;
    }

    // 替换由连续的零引起的无用汉子
    while (zsStr.indexOf("零零") !== -1 || 
    zsStr.indexOf("零万") !==  -1 ||
    zsStr.indexOf("零亿") !==  -1 || 
    zsStr.indexOf("零兆") !==  -1 || 
    zsStr.indexOf("亿万") !==  -1 ||
    zsStr.indexOf("兆万") !==  -1 ||
    zsStr.indexOf("兆亿") !==  -1 ) {
        zsStr = zsStr.replace("零零", "零");
        zsStr = zsStr.replace("零万", "万");      
        zsStr = zsStr.replace("零亿", "亿");      
        zsStr = zsStr.replace("零兆", "兆"); 
        zsStr = zsStr.replace("亿万", "亿");     
        zsStr = zsStr.replace("兆万", "兆");     
        zsStr = zsStr.replace("兆亿", "兆");     
    }
    //将以“一十”开头的替换为“十”
    if (zsStr.startsWith("一十")) {
        zsStr = zsStr.substr(1);
    }
    //将以“零”结尾的替换为“”
    if (zsStr.lastIndexOf("零") === zsStr.length - 1) {
        zsStr = zsStr.substr(0, zsStr.length - 2);
    }
    return zsStr;
  }
  
  /**
  * 处理小数,并返回小数的汉语
  */
  function xiaoshu(xs){
    var numMap = {
        0:'零',
        1:'一',
        2:'二',
        3:'三',
        4:'四',
        5:'五',
        6:'六',
        7:'七',
        8:'八',
        9:'九'
      }
    var xsChinese ="";
    
    for(var i=0;i<xs.length;i++){
      xsChinese = xsChinese + numMap[xs[i]];
    }
    return "点"+xsChinese;
  }
  
  console.log(toChinese(880000000045.7117));

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions