【原创】JS 数字转换成英文写法(包含小数)

【 转载请注明出处】:https://blog.csdn.net/Csongxuan/article/details/81706968 

最近写了一个项目,需要把数字转换成英文写法,网上找了一些代码,都不是很满意。就自己想着自己写一个,参考了网上的一些想法。基本上可以实现所有数字的的英文转换(包含两位小数)。

* 小数超过两位,返回原数据,不进行转换)  >> 如有不正确的地方,欢迎指正。

1. 调用方法:

var result = $(txtNum).val().toEnglish();

   示例:

<body>
    <input type="text" value="" id="txtNum">
    <input type="button" id="btnfan" value="翻译" onclick="fnayi()">
    <br />
    <label id="convertResult"></label>
    <script src="Test.js"></script>
    <script>
        function fnayi(){
            var result = document.getElementById('txtNum').value.toEnglish();
            document.getElementById('convertResult').innerText = result;
        }
    </script>
</body>

2.压缩加密版JS

eval(function(p,a,c,k,e,r){e=function(c){return(c<62?'':e(parseInt(c/62)))+((c=c%62)>35?String.fromCharCode(c+29):c.toString(36))};if('0'.replace(0,e)==0){while(c--)r[e(c)]=k[c];k=[function(e){return r[e]||e}];e=function(){return'[4-8bce-hj-mo-rt-zA-E]'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(j(s){c f={},n="",o="",r="",w=/^([0-9]{1,}([.][0-9]*)?)$/;f.e={k:["zero","one","two","three","four","five","six","seven","eight","nine"],x:["ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"],y:["twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"],t:["hundred","thousand","million","billion","trillion","quadrillion"]};f.u=j(n){try{c 7=5.z(n).p(\',\');4="";for(c i=0;i<7.8;i++){6(7[i].8==3){4+=5.e.k[7[i].v(0,1)]+" ";4+=5.e.t[0];6(5.q(7[i].v(1))!=""){4+=" and "+5.q(7[i].v(1))}}l 6(7[i].8==2){4+=5.q(7[i])}l 6(7[i].8==1){4+=5.e.k[7[i]]}6(i<7.8-1){4+=" "+5.e.t[7.8-1-i]+" "}}g 4}catch(A){console.error(A)}};f.B=j(n){c d=n.p(\'\');c 4=\'\';6(d.8>0){d.forEach(a=>{4+=5.u(a)+" "})}g 4};f.q=j(n){c 4="";6(C(n)!=0){c h=n.p(\'\');6(h[0]<1){4=5.e.k[h[1]]}l 6(h[0]==1){4=5.e.x[h[1]]}l{4=5.e.y[h[0]-2]+"-"+5.e.k[h[1]]}}g 4};f.z=j(b){c b=(b||0).D(),4=\'\';while(b.8>3){4=\',\'+b.E(-3)+4;b=b.E(0,b.8-3)}6(b){4=b+4}g 4};s.prototype.toEnglish=j(){n=5;6(!w.test(C(n))){g"Error:Must in digital format"}c m=n.D().p(\'.\'),r=f.u(m[0]);6(m.8==2){6(m[1].8<=2){o=f.B(m[1])}l{g n}}g r+(o==""?"":" point "+o)}})(String)',[],41,'||||result|this|if|fenge|length|||num|var||tally|NumtoEnglish|return|dd||function|arr1|else|NumList||xiao|split|doubledight|zheng||arr4|Convert_integer|substring|regxinteger|arr2|arr3|toThousands|ex|Convert_decimal|parseInt|toString|slice'.split('|'),0,{}))

 3. js源码,请自行加入项目工具类,或保存为独立的Js文件,引入项目后,即可直接调用 xx.toEnglish() 使用。

(function (s) {
    //参数
    var NumtoEnglish = {},
        n = "",
        xiao = "",
        zheng = "",
        regxinteger = /^([0-9]{1,}([.][0-9]*)?)$/;
    //数字英文写法
    NumtoEnglish.tally = {
        arr1: ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"],
        arr2: ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"],
        arr3: ["twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"],
        arr4: ["hundred", "thousand", "million", "billion", "trillion", "quadrillion"]
    }
    //转换整数部分
    NumtoEnglish.Convert_integer = function (n) {
        try {
            var fenge = this.toThousands(n).split(',');
            result = "";
            for (var i = 0; i < fenge.length; i++) {
                if (fenge[i].length == 3) {
                    result += this.tally.arr1[fenge[i].substring(0, 1)] + " "; //百位
                    result += this.tally.arr4[0];
                    if (this.doubledight(fenge[i].substring(1)) != "") {
                        result += " and " + this.doubledight(fenge[i].substring(1));
                    }
                } else if (fenge[i].length == 2) {
                    result += this.doubledight(fenge[i]) //十位
                } else if (fenge[i].length == 1) {
                    result += this.tally.arr1[fenge[i]]; //个位
                }
                //添加千分位单位(数字超过1000,每三位数字分配一个单位)
                if (i < fenge.length - 1) {
                    result += " " + this.tally.arr4[fenge.length - 1 - i] + " ";
                }
            }
            return result;
        } catch (ex) {
            console.error(ex);
        }
    }
    //转换小数部分
    NumtoEnglish.Convert_decimal = function (n) {
        var d = n.split('');
        var result = '';
        if (d.length > 0) {

            for(let i=0;i<d.length;i++){
                result += this.Convert_integer(d[i]) + " ";
            }
            
            //d.forEach(a => {
            //   result += this.Convert_integer(a) + " ";
            //});
        }
        return result;
    }
    //组合两位数
    NumtoEnglish.doubledight = function (n) {
        var result = "";
        if (parseInt(n) != 0) {
            var dd = n.split('');
            if (dd[0] < 1) {
                result = this.tally.arr1[dd[1]];
            } else if (dd[0] == 1) {
                result = this.tally.arr2[dd[1]];
            } else {
                result = this.tally.arr3[dd[0] - 2] + "-" + this.tally.arr1[dd[1]];
            }
        }
        return result;
    }

    //转换千分位显示,例:1000000 = 1,000,000
    NumtoEnglish.toThousands = function (num) {
        var num = (num || 0).toString(),
            result = '';
        while (num.length > 3) {
            result = ',' + num.slice(-3) + result;
            num = num.slice(0, num.length - 3);
        }
        if (num) {
            result = num + result;
        }
        return result;
    }

    //扩展String方法
    s.prototype.toEnglish = function () {
        n = this;
        if (!regxinteger.test(parseInt(n))) {
            return "Error:Must in digital format";
        }

        //分割整数和小数(如果有小数的话)
        var NumList = n.toString().split('.'),
            zheng = NumtoEnglish.Convert_integer(NumList[0]); //整数部分
        //如果分割长度是2,说明是小数
        if (NumList.length == 2) {
            if (NumList[1].length <= 2) {
                xiao = NumtoEnglish.Convert_decimal(NumList[1]);
            } else {
                //如果小数超过2位,不转换,返回原数据
                return n;
            }
        }
        //返回转换结果
        return zheng + (xiao == "" ? "" : " point " + xiao);
    }
})(String)

【 转载请注明出处】:https://blog.csdn.net/Csongxuan/article/details/81706968

 

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值