123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- 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)
- }
- ;
|