|
@@ -0,0 +1,302 @@
|
|
|
|
+Number.prototype.toFixed = function(j) {
|
|
|
|
+ var h = this + "";
|
|
|
|
+ if (!j) {
|
|
|
|
+ j = 0
|
|
|
|
+ }
|
|
|
|
+ if (h.indexOf(".") == -1) {
|
|
|
|
+ h += "."
|
|
|
|
+ }
|
|
|
|
+ h += new Array(j + 1).join("0");
|
|
|
|
+ if (new RegExp("^(-|\\+)?(\\d+(\\.\\d{0," + (j + 1) + "})?)\\d*$").test(h)) {
|
|
|
|
+ var h = "0" + RegExp.$2
|
|
|
|
+ , g = RegExp.$1
|
|
|
|
+ , e = RegExp.$3.length
|
|
|
|
+ , c = true;
|
|
|
|
+ if (e == j + 2) {
|
|
|
|
+ e = h.match(/\d/g);
|
|
|
|
+ if (parseInt(e[e.length - 1]) > 4) {
|
|
|
|
+ for (var f = e.length - 2; f >= 0; f--) {
|
|
|
|
+ e[f] = parseInt(e[f]) + 1;
|
|
|
|
+ if (e[f] == 10) {
|
|
|
|
+ e[f] = 0;
|
|
|
|
+ c = f != 1
|
|
|
|
+ } else {
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ h = e.join("").replace(new RegExp("(\\d+)(\\d{" + j + "})\\d$"), "$1.$2")
|
|
|
|
+ }
|
|
|
|
+ if (c) {
|
|
|
|
+ h = h.substr(1)
|
|
|
|
+ }
|
|
|
|
+ return (g + h).replace(/\.$/, "")
|
|
|
|
+ }
|
|
|
|
+ return this + ""
|
|
|
|
+}
|
|
|
|
+;
|
|
|
|
+var CalcEvalMin = function() {};
|
|
|
|
+CalcEvalMin.prototype.eval = function(str) {
|
|
|
|
+ var isRetStr = str.match(new RegExp(/^".+"$/g)) != null;
|
|
|
|
+ if (isRetStr == true) {
|
|
|
|
+ str = str.replace(/^"|"$/g, "")
|
|
|
|
+ }
|
|
|
|
+ var bracketsList = this.matchOutBrackets(str);
|
|
|
|
+ for (var i = 0; i < bracketsList.length; i++) {
|
|
|
|
+ var newCalc = bracketsList[i];
|
|
|
|
+ var calcStr = this.eval(newCalc.str.replace(/^\(|\)$/g, ""));
|
|
|
|
+ str = str.replace(newCalc.str, calcStr)
|
|
|
|
+ }
|
|
|
|
+ var errorObj = new Array();
|
|
|
|
+ while (1) {
|
|
|
|
+ var multObj = this.matchExp(str, "/");
|
|
|
|
+ if (multObj == null) {
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ var v = this.executeDivi(multObj.firstValue, multObj.secondValue);
|
|
|
|
+ if (v == "NaN") {
|
|
|
|
+ var t = "T" + new Date().getTime();
|
|
|
|
+ errorObj.push({
|
|
|
|
+ Name: t,
|
|
|
|
+ Exp: multObj.str
|
|
|
|
+ });
|
|
|
|
+ str = str.replace(multObj.str, t)
|
|
|
|
+ } else {
|
|
|
|
+ str = str.replace(multObj.str, v)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ while (1) {
|
|
|
|
+ var multObj = this.matchExp(str, "*");
|
|
|
|
+ if (multObj == null) {
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ var v = this.executeMult(multObj.firstValue, multObj.secondValue);
|
|
|
|
+ if (v == "NaN") {
|
|
|
|
+ var t = "T" + new Date().getTime();
|
|
|
|
+ errorObj.push({
|
|
|
|
+ Name: t,
|
|
|
|
+ Exp: multObj.str
|
|
|
|
+ });
|
|
|
|
+ str = str.replace(multObj.str, t)
|
|
|
|
+ } else {
|
|
|
|
+ str = str.replace(multObj.str, v)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ while (1) {
|
|
|
|
+ var multObj = this.matchExp(str, "+");
|
|
|
|
+ if (multObj == null) {
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ var v = this.executeAddi(multObj.firstValue, multObj.secondValue);
|
|
|
|
+ if (v == "NaN" || isNaN(v)) {
|
|
|
|
+ var t = "T" + new Date().getTime();
|
|
|
|
+ errorObj.push({
|
|
|
|
+ Name: t,
|
|
|
|
+ Exp: multObj.str
|
|
|
|
+ });
|
|
|
|
+ str = str.replace(multObj.str, t)
|
|
|
|
+ } else {
|
|
|
|
+ str = str.replace(multObj.str, v)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ while (1) {
|
|
|
|
+ var multObj = this.matchExp(str, "-");
|
|
|
|
+ if (multObj == null) {
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ var v = this.executeSubt(multObj.firstValue, multObj.secondValue);
|
|
|
|
+ if (v == "NaN") {
|
|
|
|
+ var t = "T" + new Date().getTime();
|
|
|
|
+ errorObj.push({
|
|
|
|
+ Name: t,
|
|
|
|
+ Exp: multObj.str
|
|
|
|
+ });
|
|
|
|
+ str = str.replace(multObj.str, t)
|
|
|
|
+ } else {
|
|
|
|
+ str = str.replace(multObj.str, v)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ for (var i = errorObj.length - 1; i >= 0; i--) {
|
|
|
|
+ var ex = errorObj[i];
|
|
|
|
+ str = str.replace(ex.Name, ex.Exp)
|
|
|
|
+ }
|
|
|
|
+ while (1) {
|
|
|
|
+ var multObj = str.match(/\d*={2,3}\d*/g);
|
|
|
|
+ if (multObj == null) {
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ var v = eval(multObj[0]);
|
|
|
|
+ str = str.replace(multObj[0], v)
|
|
|
|
+ }
|
|
|
|
+ if (isRetStr == true) {
|
|
|
|
+ try {
|
|
|
|
+ return eval('"' + str + '"')
|
|
|
|
+ } catch (e) {}
|
|
|
|
+ try {
|
|
|
|
+ return eval(str)
|
|
|
|
+ } catch (e) {}
|
|
|
|
+ return str
|
|
|
|
+ }
|
|
|
|
+ if (str.match(/(^true$)|(^false$)/g)) {
|
|
|
|
+ return str === "true"
|
|
|
|
+ }
|
|
|
|
+ if (!isNaN(Number(str))) {
|
|
|
|
+ return Number(str)
|
|
|
|
+ }
|
|
|
|
+ try {
|
|
|
|
+ return eval(str)
|
|
|
|
+ } catch (e) {}
|
|
|
|
+ return str
|
|
|
|
+}
|
|
|
|
+;
|
|
|
|
+CalcEvalMin.prototype.matchOutBrackets = function(f) {
|
|
|
|
+ var h = new Array();
|
|
|
|
+ if (f == null) {
|
|
|
|
+ return h
|
|
|
|
+ }
|
|
|
|
+ if (typeof f != "string") {
|
|
|
|
+ f = f + ""
|
|
|
|
+ }
|
|
|
|
+ var d = f.split("");
|
|
|
|
+ var a = 0;
|
|
|
|
+ var g = false;
|
|
|
|
+ var b = -1;
|
|
|
|
+ for (var c = 0; c < d.length; c++) {
|
|
|
|
+ if (d[c] == "(") {
|
|
|
|
+ a++;
|
|
|
|
+ g = true;
|
|
|
|
+ if (b == -1) {
|
|
|
|
+ b = c
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (d[c] == ")") {
|
|
|
|
+ a--
|
|
|
|
+ }
|
|
|
|
+ if (g == true && a == 0) {
|
|
|
|
+ var e = new Object();
|
|
|
|
+ e.str = f.substring(b, c + 1);
|
|
|
|
+ e.firstIndex = b;
|
|
|
|
+ e.lastIndex = c + 1;
|
|
|
|
+ h.push(e);
|
|
|
|
+ b = -1;
|
|
|
|
+ g = false;
|
|
|
|
+ a = 0
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return h
|
|
|
|
+}
|
|
|
|
+;
|
|
|
|
+CalcEvalMin.prototype.matchExp = function(l, f) {
|
|
|
|
+ var j = null;
|
|
|
|
+ if (l == null) {
|
|
|
|
+ return retList
|
|
|
|
+ }
|
|
|
|
+ if (typeof l != "string") {
|
|
|
|
+ l = l + ""
|
|
|
|
+ }
|
|
|
|
+ var k = l.split("");
|
|
|
|
+ var c = 0;
|
|
|
|
+ var b = 0;
|
|
|
|
+ var g = "";
|
|
|
|
+ var e = "";
|
|
|
|
+ var a = "";
|
|
|
|
+ var d = false;
|
|
|
|
+ for (var h = 0; h <= k.length; h++) {
|
|
|
|
+ if (k[h] == "+" || k[h] == "-" || k[h] == "*" || k[h] == "/" || k[h] == "%" || h == k.length) {
|
|
|
|
+ if (a == "" && k[h] == "-") {
|
|
|
|
+ a += k[h];
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+ if (d == true) {
|
|
|
|
+ e = a;
|
|
|
|
+ b = h;
|
|
|
|
+ j = new Object();
|
|
|
|
+ j.firstIndex = c;
|
|
|
|
+ j.secondIndex = b;
|
|
|
|
+ j.str = l.substring(c, b);
|
|
|
|
+ j.firstValue = Number(g);
|
|
|
|
+ j.secondValue = Number(e);
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ if (k[h] == null) {
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ if (k[h] == f) {
|
|
|
|
+ d = true;
|
|
|
|
+ g = a;
|
|
|
|
+ a = ""
|
|
|
|
+ } else {
|
|
|
|
+ a = "";
|
|
|
|
+ c = -1
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ a += k[h];
|
|
|
|
+ if (c == -1) {
|
|
|
|
+ c = h
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return j
|
|
|
|
+}
|
|
|
|
+;
|
|
|
|
+CalcEvalMin.prototype.executeMult = function(d, b) {
|
|
|
|
+ var a = 0
|
|
|
|
+ , f = d.toString()
|
|
|
|
+ , c = b.toString();
|
|
|
|
+ try {
|
|
|
|
+ a += f.split(".")[1].length
|
|
|
|
+ } catch (g) {}
|
|
|
|
+ try {
|
|
|
|
+ a += c.split(".")[1].length
|
|
|
|
+ } catch (g) {}
|
|
|
|
+ return Number(f.replace(".", "")) * Number(c.replace(".", "")) / Math.pow(10, a)
|
|
|
|
+}
|
|
|
|
+;
|
|
|
|
+CalcEvalMin.prototype.executeDivi = function(arg1, arg2) {
|
|
|
|
+ var t1 = 0, t2 = 0, r1, r2;
|
|
|
|
+ try {
|
|
|
|
+ t1 = arg1.toString().split(".")[1].length
|
|
|
|
+ } catch (e) {}
|
|
|
|
+ try {
|
|
|
|
+ t2 = arg2.toString().split(".")[1].length
|
|
|
|
+ } catch (e) {}
|
|
|
|
+ with (Math) {
|
|
|
|
+ r1 = Number(arg1.toString().replace(".", ""));
|
|
|
|
+ r2 = Number(arg2.toString().replace(".", ""));
|
|
|
|
+ return this.executeMult(r1 / r2, pow(10, t2 - t1))
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+;
|
|
|
|
+CalcEvalMin.prototype.executeAddi = function(arg1, arg2) {
|
|
|
|
+ var r1, r2, m;
|
|
|
|
+ try {
|
|
|
|
+ r1 = arg1.toString().split(".")[1].length
|
|
|
|
+ } catch (e) {
|
|
|
|
+ r1 = 0
|
|
|
|
+ }
|
|
|
|
+ try {
|
|
|
|
+ r2 = arg2.toString().split(".")[1].length
|
|
|
|
+ } catch (e) {
|
|
|
|
+ r2 = 0
|
|
|
|
+ }
|
|
|
|
+ m = Math.pow(10, Math.max(r1, r2));
|
|
|
|
+ return (this.eval(arg1 + "*" + m) + this.eval(arg2 + "*" + m)) / m
|
|
|
|
+}
|
|
|
|
+;
|
|
|
|
+CalcEvalMin.prototype.executeSubt = function(arg1, arg2) {
|
|
|
|
+ var r1, r2, m, n;
|
|
|
|
+ try {
|
|
|
|
+ r1 = arg1.toString().split(".")[1].length
|
|
|
|
+ } catch (e) {
|
|
|
|
+ r1 = 0
|
|
|
|
+ }
|
|
|
|
+ try {
|
|
|
|
+ r2 = arg2.toString().split(".")[1].length
|
|
|
|
+ } catch (e) {
|
|
|
|
+ r2 = 0
|
|
|
|
+ }
|
|
|
|
+ m = Math.pow(10, Math.max(r1, r2));
|
|
|
|
+ n = (r1 >= r2) ? r1 : r2;
|
|
|
|
+ return ((this.eval(arg1 + "*" + m) - this.eval(arg2 + "*" + m)) / m).toFixed(n)
|
|
|
|
+}
|
|
|
|
+;
|