351 lines
7.3 KiB
JavaScript
351 lines
7.3 KiB
JavaScript
function i(e) {
|
|
this.arr = [];
|
|
this.len = 0;
|
|
undefined == e && (e = "0");
|
|
this.base = e;
|
|
this.init();
|
|
}
|
|
i.prototype.init = function () {
|
|
var e = this.base.slice(-1);
|
|
if (e.charCodeAt() > 57) {
|
|
var o = {
|
|
K: 3,
|
|
M: 6,
|
|
B: 9,
|
|
T: 12,
|
|
P: 15,
|
|
E: 18,
|
|
Z: 21,
|
|
Y: 24,
|
|
N: 27,
|
|
D: 30,
|
|
S: 33,
|
|
U: 36,
|
|
Q: 39
|
|
}[e];
|
|
var t = this.base.slice(0, this.base.length - 1).split(".");
|
|
for (var i = 0; i < o - 1; i++) {
|
|
this.arr.push(0);
|
|
}
|
|
if (t.length > 1) {
|
|
var n = parseInt(t[1]);
|
|
n = Math.floor(n / Math.pow(10, t[1].length - 1));
|
|
this.arr.push(n);
|
|
} else {
|
|
this.arr.push(0);
|
|
}
|
|
var a = t[0].split("");
|
|
for (var c = a.length - 1; c >= 0; c--) {
|
|
this.arr.push(parseInt(a[c]));
|
|
}
|
|
} else {
|
|
var s = this.base.split("");
|
|
for (var l = s.length - 1; l >= 0; l--) {
|
|
this.arr.push(parseInt(s[l]));
|
|
}
|
|
}
|
|
this.len = this.arr.length;
|
|
this.base = this.getShortString();
|
|
};
|
|
i.prototype.alterationBase = function () {
|
|
var e = arguments.length > 0 && undefined !== arguments[0] ? arguments[0] : "0";
|
|
this.arr = [];
|
|
this.len = 0;
|
|
this.base = e;
|
|
this.init();
|
|
};
|
|
i.prototype.plus = function (e) {
|
|
var o = [];
|
|
var t = Math.max(e.len, this.len);
|
|
var i = false;
|
|
for (var n = 0; n < t; n++) {
|
|
if (undefined !== e.arr[n] && undefined !== this.arr[n]) {
|
|
var a = e.arr[n] + this.arr[n];
|
|
if (i) {
|
|
a += 1;
|
|
i = false;
|
|
}
|
|
if (a >= 10) {
|
|
i = true;
|
|
o[n] = a % 10;
|
|
} else {
|
|
o[n] = a;
|
|
}
|
|
} else {
|
|
var c = undefined !== e.arr[n] ? e.arr[n] : this.arr[n];
|
|
if (i) {
|
|
c += 1;
|
|
i = false;
|
|
}
|
|
if (c >= 10) {
|
|
i = true;
|
|
o[n] = c % 10;
|
|
} else {
|
|
o[n] = c % 10;
|
|
}
|
|
}
|
|
}
|
|
i && o.push(1);
|
|
this.arr = o;
|
|
this.len = this.arr.length;
|
|
this.base = this.getShortString();
|
|
};
|
|
i.prototype.minus = function (e) {
|
|
var o = [];
|
|
if (e.len > this.len || e.len == this.len && this.arr[this.len - 1] < e.arr[this.len - 1]) {
|
|
o.push(0);
|
|
} else {
|
|
var t = 0;
|
|
var i = this.len;
|
|
var n = 0;
|
|
for (var a = 0; a < i && (n = this.arr[a], n -= t, a < e.len && (n -= e.arr[a]), n < 0 ? (t = 1, n += 10) : t = 0, !(n < 0)); a++) {
|
|
o.push(n);
|
|
}
|
|
0 != t && (o = [0]);
|
|
}
|
|
a = this.len = o.length;
|
|
for (var c = -1; a-- && 0 == o[a];) {
|
|
c = Math.max(1, a);
|
|
}
|
|
c >= 0 && o.splice(c, this.len - c);
|
|
this.arr = o;
|
|
this.len = this.arr.length;
|
|
return this.base = this.getShortString();
|
|
};
|
|
i.prototype.mult = function (e) {
|
|
var o = [];
|
|
var t = 0;
|
|
var i = e + "";
|
|
var n = Math.max(this.len, i.length);
|
|
for (var a = 0; a <= n && (undefined != this.arr[a] || 0 != t); a++) {
|
|
var c = 0;
|
|
undefined !== this.arr[a] && (c = this.arr[a] * e);
|
|
if (t > 0) {
|
|
c += t;
|
|
t = 0;
|
|
}
|
|
c > 9 && (t = Math.floor(c / 10));
|
|
c %= 10;
|
|
o[a] = c;
|
|
}
|
|
if (t > 0) {
|
|
if (t > 9) {
|
|
var s = Math.floor(t / 10);
|
|
t %= 10;
|
|
o.push(t);
|
|
o.push(s);
|
|
} else {
|
|
o.push(t);
|
|
}
|
|
}
|
|
"10" == this.arr[0] || this.arr[1];
|
|
this.arr = o;
|
|
this.len = this.arr.length;
|
|
this.getShortString();
|
|
return this;
|
|
};
|
|
i.prototype.mult2 = function (e) {
|
|
var o = (e += "").split("");
|
|
var t = 0;
|
|
var n = new i();
|
|
for (var a = o.length - 1; a >= 0; a--) {
|
|
var c = new i().copy(this);
|
|
c.mult(parseInt(e.charAt(a)));
|
|
c.mult10(t);
|
|
t++;
|
|
n.plus(c);
|
|
}
|
|
this.copy(n);
|
|
return this;
|
|
};
|
|
i.prototype.mult10 = function (e) {
|
|
for (undefined === e && (e = 1); e--;) {
|
|
this.arr.unshift(0);
|
|
}
|
|
this.len = this.arr.length;
|
|
return this;
|
|
};
|
|
i.prototype.div = function (e) {
|
|
var o = false;
|
|
var t = [];
|
|
var i = 0;
|
|
var n = 0;
|
|
var a = this.len;
|
|
for (var c = 0; a--;) {
|
|
c = 10 * i + this.arr[a];
|
|
n = Math.floor(c / e);
|
|
if (o || n > 0) {
|
|
t.push(n);
|
|
o = true;
|
|
}
|
|
i = c % e;
|
|
}
|
|
this.len = t.length;
|
|
if (0 == this.len) {
|
|
this.arr = [1];
|
|
this.len = 1;
|
|
} else {
|
|
this.arr = t;
|
|
this.arr.reverse();
|
|
}
|
|
"10" == this.arr[0] || this.arr[1];
|
|
this.getShortString();
|
|
return this;
|
|
};
|
|
i.prototype.getShortString = function () {
|
|
var e = 0;
|
|
var o = 0;
|
|
var t = "";
|
|
var i = 0;
|
|
if (1 == (e = this.len) && 0 == this.arr[0]) {
|
|
return "0";
|
|
}
|
|
o = e % 3;
|
|
i = Math.floor(e / 3);
|
|
if (0 == o) {
|
|
o = 3;
|
|
i--;
|
|
}
|
|
for (o = e - o; e-- > o;) {
|
|
t += this.arr[e];
|
|
}
|
|
i > 0 && this.arr[e] > 0 && (t += "." + this.arr[e]);
|
|
return t + ["", "K", "M", "B", "T", "P", "E", "Z", "Y", "N", "D", "S", "U", "Q"][i];
|
|
};
|
|
i.prototype.getAnyNumStr = function () {
|
|
var e = "";
|
|
for (var o = this.len - 1; o >= 0; o--) {
|
|
e += this.arr[o];
|
|
}
|
|
return e;
|
|
};
|
|
i.prototype.bigger = function (e) {
|
|
if (this.len > e.len) {
|
|
return true;
|
|
}
|
|
if (this.len < e.len) {
|
|
return false;
|
|
}
|
|
for (var o = this.len; o--;) {
|
|
if (this.arr[o] > e.arr[o]) {
|
|
return true;
|
|
}
|
|
if (this.arr[o] < e.arr[o]) {
|
|
return false;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
i.prototype.biggerIncludeEqual = function (e) {
|
|
if (this.len > e.len) {
|
|
return true;
|
|
}
|
|
if (this.len < e.len) {
|
|
return false;
|
|
}
|
|
for (var o = this.len; o--;) {
|
|
if (this.arr[o] > e.arr[o]) {
|
|
return true;
|
|
}
|
|
if (this.arr[o] < e.arr[o]) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
i.prototype.bigger2 = function (e) {
|
|
if (this.len > e.len) {
|
|
return true;
|
|
}
|
|
if (this.len < e.len) {
|
|
return false;
|
|
}
|
|
for (var o = this.len; o--;) {
|
|
if (this.arr[o] > e.arr[o]) {
|
|
return true;
|
|
}
|
|
if (this.arr[o] < e.arr[o]) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
i.prototype.copy = function (e) {
|
|
this.arr = e.arr.concat();
|
|
this.len = e.len;
|
|
this.base = e.base;
|
|
this.getShortString();
|
|
return this;
|
|
};
|
|
i.prototype.zero = function (e) {
|
|
this.arr = [];
|
|
this.len = 0;
|
|
this.base = "0";
|
|
};
|
|
i.prototype.isZero = function (e) {
|
|
return !(0 != this.len && 1 != this.len || 0 != this.arr.length && 0 != this.arr[0]);
|
|
};
|
|
i.prototype.isOne = function (e) {
|
|
return 1 != this.len || 1 != this.arr[0];
|
|
};
|
|
i.prototype.noZero = function () {
|
|
if (this.isZero()) {
|
|
this.arr = [1];
|
|
this.len = 1;
|
|
this.base = "1";
|
|
}
|
|
};
|
|
i.prototype.div10 = function (e) {
|
|
undefined == e && (e = 1);
|
|
for (; e > 0; e--) {
|
|
this.arr.shift();
|
|
}
|
|
this.len = this.arr.length;
|
|
this.len <= 0 && this.zero();
|
|
this.getShortString();
|
|
return this;
|
|
};
|
|
i.prototype.divPresent = function (e) {
|
|
var o = this.len - e.len;
|
|
if (o >= 3) {
|
|
return 0;
|
|
}
|
|
if (o < -3) {
|
|
return 10;
|
|
}
|
|
var t = Math.max(this.len, e.len);
|
|
var i = "";
|
|
var n = "";
|
|
for (o = Math.min(3, t); o--;) {
|
|
--t < this.len && (i += this.arr[t]);
|
|
t < e.len && (n += e.arr[t]);
|
|
}
|
|
this.getShortString();
|
|
return parseFloat(n) / parseFloat(i);
|
|
};
|
|
i.prototype.present100 = function (e) {
|
|
if (0 == e) {
|
|
return this;
|
|
} else {
|
|
if (e <= 1e3) {
|
|
return this.mult(e).div10(2);
|
|
} else {
|
|
if (e <= 1e4) {
|
|
return e = Math.floor(e / 10), this.mult(e).div10(1);
|
|
} else {
|
|
if (e <= 1e5) {
|
|
return e = Math.floor(e / 100), this.mult(e);
|
|
} else {
|
|
return this.mult(e).div10(2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
i.prototype.getDetails = function () {
|
|
return {
|
|
display: this.getShortString(),
|
|
real: this.getAnyNumStr()
|
|
};
|
|
};
|
|
module.exports = i; |