-
Notifications
You must be signed in to change notification settings - Fork 46
Open
Description
/**
* 将一个数字转换成汉语
*/
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
Labels
No labels