【 转载请注明出处】: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