JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / bin / javajs / util / DF.js
1 Clazz.declarePackage ("javajs.util");\r
2 Clazz.load (["java.lang.Boolean"], "javajs.util.DF", ["java.lang.Double", "$.Float", "javajs.util.PT", "$.SB"], function () {\r
3 c$ = Clazz.declareType (javajs.util, "DF");\r
4 c$.setUseNumberLocalization = Clazz.defineMethod (c$, "setUseNumberLocalization", \r
5 function (TF) {\r
6 javajs.util.DF.useNumberLocalization[0] = (TF ? Boolean.TRUE : Boolean.FALSE);\r
7 }, "~B");\r
8 c$.formatDecimalDbl = Clazz.defineMethod (c$, "formatDecimalDbl", \r
9 function (value, decimalDigits) {\r
10 if (decimalDigits == 2147483647 || value == -Infinity || value == Infinity || Double.isNaN (value)) return "" + value;\r
11 return javajs.util.DF.formatDecimal (value, decimalDigits);\r
12 }, "~N,~N");\r
13 c$.formatDecimal = Clazz.defineMethod (c$, "formatDecimal", \r
14 function (value, decimalDigits) {\r
15 if (decimalDigits == 2147483647 || value == -Infinity || value == Infinity || Float.isNaN (value)) return "" + value;\r
16 var n;\r
17 if (decimalDigits < 0) {\r
18 decimalDigits = -decimalDigits;\r
19 if (decimalDigits > javajs.util.DF.formattingStrings.length) decimalDigits = javajs.util.DF.formattingStrings.length;\r
20 if (value == 0) return javajs.util.DF.formattingStrings[decimalDigits] + "E+0";\r
21 n = 0;\r
22 var d;\r
23 if (Math.abs (value) < 1) {\r
24 n = 10;\r
25 d = value * 1e-10;\r
26 } else {\r
27 n = -10;\r
28 d = value * 1e10;\r
29 }var s = ("" + d).toUpperCase ();\r
30 var i = s.indexOf ("E");\r
31 n = javajs.util.PT.parseInt (s.substring (i + 1)) + n;\r
32 return (i < 0 ? "" + value : javajs.util.DF.formatDecimal (javajs.util.PT.parseFloat (s.substring (0, i)), decimalDigits - 1) + "E" + (n >= 0 ? "+" : "") + n);\r
33 }if (decimalDigits >= javajs.util.DF.formattingStrings.length) decimalDigits = javajs.util.DF.formattingStrings.length - 1;\r
34 var s1 = ("" + value).toUpperCase ();\r
35 var pt = s1.indexOf (".");\r
36 if (pt < 0) return s1 + javajs.util.DF.formattingStrings[decimalDigits].substring (1);\r
37 var isNeg = s1.startsWith ("-");\r
38 if (isNeg) {\r
39 s1 = s1.substring (1);\r
40 pt--;\r
41 }var pt1 = s1.indexOf ("E-");\r
42 if (pt1 > 0) {\r
43 n = javajs.util.PT.parseInt (s1.substring (pt1 + 1));\r
44 s1 = "0." + "0000000000000000000000000000000000000000".substring (0, -n - 1) + s1.substring (0, 1) + s1.substring (2, pt1);\r
45 pt = 1;\r
46 }pt1 = s1.indexOf ("E");\r
47 if (pt1 > 0) {\r
48 n = javajs.util.PT.parseInt (s1.substring (pt1 + 1));\r
49 s1 = s1.substring (0, 1) + s1.substring (2, pt1) + "0000000000000000000000000000000000000000";\r
50 s1 = s1.substring (0, n + 1) + "." + s1.substring (n + 1);\r
51 pt = s1.indexOf (".");\r
52 }var len = s1.length;\r
53 var pt2 = decimalDigits + pt + 1;\r
54 if (pt2 < len && s1.charAt (pt2) >= '5') {\r
55 return javajs.util.DF.formatDecimal (value + (isNeg ? -1 : 1) * javajs.util.DF.formatAdds[decimalDigits], decimalDigits);\r
56 }var sb = javajs.util.SB.newS (s1.substring (0, (decimalDigits == 0 ? pt : ++pt)));\r
57 for (var i = 0; i < decimalDigits; i++, pt++) {\r
58 if (pt < len) sb.appendC (s1.charAt (pt));\r
59  else sb.appendC ('0');\r
60 }\r
61 s1 = (isNeg ? "-" : "") + sb;\r
62 return (Boolean.TRUE.equals (javajs.util.DF.useNumberLocalization[0]) ? s1 : s1.$replace (',', '.'));\r
63 }, "~N,~N");\r
64 c$.formatDecimalTrimmed = Clazz.defineMethod (c$, "formatDecimalTrimmed", \r
65 function (x, precision) {\r
66 var str = javajs.util.DF.formatDecimalDbl (x, precision);\r
67 var m = str.length - 1;\r
68 var zero = '0';\r
69 while (m >= 0 && str.charAt (m) == zero) m--;\r
70 \r
71 return str.substring (0, m + 1);\r
72 }, "~N,~N");\r
73 Clazz.defineStatics (c$,\r
74 "formattingStrings",  Clazz.newArray (-1, ["0", "0.0", "0.00", "0.000", "0.0000", "0.00000", "0.000000", "0.0000000", "0.00000000", "0.000000000"]),\r
75 "zeros", "0000000000000000000000000000000000000000",\r
76 "formatAdds",  Clazz.newFloatArray (-1, [0.5, 0.05, 0.005, 0.0005, 0.00005, 0.000005, 0.0000005, 0.00000005, 0.000000005, 0.0000000005]));\r
77 c$.useNumberLocalization = c$.prototype.useNumberLocalization =  Clazz.newArray (-1, [Boolean.TRUE]);\r
78 });\r