Skip to content

Commit dbbd39b

Browse files
authored
Implement ExpantaNum function for number formatting
1 parent 637ddc2 commit dbbd39b

1 file changed

Lines changed: 55 additions & 0 deletions

File tree

notations/normal/ExpantaNum.js

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
var notations=notations||{};
2+
notations.normal=notations.normal||{};
3+
notations.normal.ExpantaNum=(function (i){
4+
if (!(i.isFinite())) return "Infinity";
5+
if (i.lt(1000)) return i.toString();
6+
if (i.gte(1000)&&i.lt(1e+6)){
7+
var h=Number(i);
8+
var l;
9+
var r=Math.floor(h%1000);
10+
l=String(r);
11+
if (r<10) l="00"+l;
12+
if ((r>=10)&&(r<100)) l="0"+l;
13+
return Math.floor(h/1000)+","+l;
14+
}
15+
var numbernames=["thousand","million","billion","trillion","quadrillion","quintillion","sextillion","septillion","octillion","nonillion","decillion","undecillion","duodecillion","tredecillion","quattuordecillion","quindecillion","sexdecillion","septendecillion","octodecillion","novemdecillion"];
16+
var namefragments=[["","un","duo","tre","quattuor","quinqua","se","septe","octo","nove"],["","deci","viginti","triginta","quadraginta","quinquaginta","sexaginta","septuaginta","octoginta","nonaginta"],["","centi","ducenti","trecenti","quadringenti","quingenti","sesgenti","septingenti","octingenti","nongenti"],["","milli","micro","nano","pico","femto","atto","zepto","yocto","xon","vec","mec","duec","trec","tetrec","pentec","hexec","heptec","octec","ennec"],["","mono","di","tri","tetra","penta","hexa","hepta","octa","nona"],["","vec","icosa","triaconta","tetraconta","pentaconta","hexaconta","heptaconta","octaconta","ennaconta","hecto","kilo","pentalogue","hexalogue","heptalogue","octalogue","ennalogue","dekalogue","generaltriplex",]];
17+
var e=3*Math.floor(Number(Decimal.log10(i))/3);
18+
var l=Math.floor(e/3)-1;
19+
//console.log(l);
20+
if (l<=19){
21+
return Math.floor(Number(i.div(new Decimal("1e+"+e)))*1000)/1000+" "+numbernames[l];
22+
}else{
23+
var r="";
24+
var s;
25+
var mu;
26+
for (var g=Math.floor(Math.log10(l)/3);g>=0;g--){
27+
var mu=Math.floor(l/Math.pow(1000,g))%1000;
28+
s="";
29+
if ((mu===1)&&(g!==0)){
30+
s="";
31+
}else if ((mu<=19)&&(g===0)){
32+
s=numbernames[mu];
33+
}else{
34+
var d=[mu%10,Math.floor(mu%100/10),Math.floor(mu/100)];
35+
s=namefragments[0][d[0]];
36+
if ([3,6].includes(d[0])&&(((d[1]!=0)&&[2,3,4,5].includes(d[1]))||((d[1]==0)&&[3,4].includes(d[2]==3)))) s+="s";
37+
if ((d[0]==6)&&(((d[1]!=0)&&(d[1]==8))||((d[1]==0)&&(d[2]==8)))) s+="x";
38+
if ([7,9].includes(d[0])&&(((d[1]!=0)&&[1,3,4,5,6,7].includes(d[1]))||((d[1]==0)&&[2,3,4,5,6,7].includes(d[2])))) s+="n";
39+
if ([7,9].includes(d[0])&&(((d[1]!=0)&&((d[1]==2)||(d[1]==8)))||((d[1]==0)&&(d[2]==8)))) s+="m";
40+
s+=namefragments[1][d[1]]+namefragments[2][d[2]];
41+
}
42+
if (mu!==0){
43+
if (g<=19){
44+
r+=s+namefragments[3][g];
45+
}else{
46+
r+=s+namefragments[4][g%10]+namefragments[5][Math.floor(g/10)];
47+
}
48+
}
49+
}
50+
var w=r.charAt(r.length-1);
51+
if (["a","i","o"].includes(w)) r=r.substr(0,r.length-1);
52+
r+="illion";
53+
return Math.floor(Number(i.div(new Decimal("1e+"+e)))*1000)/1000+" "+r;
54+
}
55+
});

0 commit comments

Comments
 (0)