自己写项目时遇到的一个问题,网上找了好多都不太好(而且都是抄袭的一模一样),就自己写了一个,分享给大家。
目前只有正整数,后面会考虑加入其它数字类型
var arr1 = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
var arr2 = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"];
var arr3 = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"];
var arr4 = ["hundred", "thousand", "million", "billion", "trillion", "quadrillion"];
function NumtoEiglish(num) {
var strnum = num.toString();
//正则验证是否是数字
var regxnum = /^[1-9]+[0-9]*]*$/;
if (!regxnum.test(num)) {
console.log("参数不是正整数");
return false;
}
if (num >= 0 && num < 10) {
//0-9
return arr1[num];
} else if (num >= 10 && num < 20) {
//10-19
return arr2[parseInt(strnum.substring(1, 1))];
} else if (num >= 20 && num < 100) {
//20-99
var shiwei = arr3[parseInt(strnum.substring(0, 1)) - 2]; //十位
var gewei = parseInt(strnum.substring(1)) > 0 ? "-" + arr1[parseInt(strnum.substring(1))] : ""; //个位
return shiwei + gewei;
} else if (num >= 100 && num < 1000) {
//100-999
var bai = arr1[parseInt(strnum.substring(0, 1))] + " " + arr4[0];
return bai + " and " + NumtoEiglish(strnum.substring(1));
} else {
//1000+
var fenge = num.toLocaleString().toString().split(',');
var resultnum = "";
for (var i = fenge.length; i > 0; i--) {
var fenduan = ""; //分段转换
var ascnum = fenge.length - i; //获取分割后正序索引
if (i > 1) {
//给每一个分割数字后面添加单位
fenduan = NumtoEiglish(parseInt(fenge[ascnum])) + " " + arr4[i - 1];
//每一个分割数字拼接时用空格隔开
resultnum += fenduan + " ";
} else {
//如果当前索引的数字小于100需要添加and拼接
if (parseInt(fenge[i]) < 100) {
fenduan = " and " + NumtoEiglish(parseInt(fenge[ascnum]));
} else {
fenduan = NumtoEiglish(parseInt(fenge[ascnum]));
}
resultnum += fenduan;
}
}
return resultnum;
}
}
【 转载请注明出处】:https://blog.csdn.net/Csongxuan/article/details/81706968