【原创】JS 数字转换成英文写法

 自己写项目时遇到的一个问题,网上找了好多都不太好(而且都是抄袭的一模一样),就自己写了一个,分享给大家。

目前只有正整数,后面会考虑加入其它数字类型

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

猜你喜欢

转载自blog.csdn.net/Csongxuan/article/details/81706968