let suan = {
ADD(...args){
const {nums,pm} = this.filter(args,'max');
if( !nums.length || nums.length < 2 ){
return nums[0]||0
}
let c = 0;
for (let i = 0,nlen=nums.length; i < nlen; i++) {
c += nums[i] * pm
}
return c/pm;
},
SUB(...args){
const {nums,pm} = this.filter(args,'max');
if( !nums.length || nums.length < 2 ){
return nums[0]||0;
}
let c = 0;
for (let i = 0,nlen=nums.length; i < nlen; i++) {
if( !i ){
c = nums[i] * pm;
}else{
c -= nums[i] * pm;
}
}
return c/pm;
},
MUL(...args){
const {nums,pm} = this.filter(args,'sum');
if( !nums.length || nums.length < 2 ){
return nums[0]||0
}
let c = 1;
for (let i = 0,nlen=nums.length; i < nlen; i++) {
c *= Number((nums[i]+'').replace(".",""))
}
return c/pm;
},
DIV(...args){
const {nums,pm} = this.filter(args,'sub');
if( !nums.length || nums.length < 2 ){
return nums[0]||0
}
let c = 1;
for (let i = 0,nlen=nums.length; i < nlen; i++) {
if( !i ){
c = Number((nums[i]+'').replace(".",""));
}else{
c /= Number((nums[i]+'').replace(".",""));
}
}
return this.MUL(c,pm).toFixed(2);
},
filter(l,f){
let a = [];
let m = 0;
let s = 0;
let si = f === 'sub'?l.length-1:0;
let of = {
max(){
m = Math.max(m,s.length);
},
sum(){
m += s.length;
},
sub(i){
if( !i ){
m = s.length;
return;
}
m -= s.length;
},
}
for (let i = 0,len=l.length; i < len; i++) {
if( l[i] = l[i] * 1 ){
s = (l[ Math.abs(si-i) ]+'').split(".")[1]||'';
of[f] && of[f](i);
a.push( l[i] );
}
}
return {
nums: a,
pm: Math.pow(10, m)
};
},
}
var calc = {
Add: function (arg1, arg2) {
arg1 = arg1.toString(), arg2 = arg2.toString();
var arg1Arr = arg1.split("."),
arg2Arr = arg2.split("."),
d1 = arg1Arr.length == 2 ? arg1Arr[1] : "",
d2 = arg2Arr.length == 2 ? arg2Arr[1] : "";
var maxLen = Math.max(d1.length, d2.length);
var m = Math.pow(10, maxLen);
var result = Number(((arg1 * m + arg2 * m) / m).toFixed(maxLen));
var d = arguments[2];
return typeof d === "number" ? Number((result).toFixed(d)) : result;
},
Sub: function (arg1, arg2) {
return Calc.Add(arg1, -Number(arg2), arguments[2]);
},
Mul: function (arg1, arg2) {
var r1 = arg1.toString(), r2 = arg2.toString(), m, resultVal, d = arguments[2];
m = (r1.split(".")[1] ? r1.split(".")[1].length : 0) + (r2.split(".")[1] ? r2.split(".")[1].length : 0);
resultVal = Number(r1.replace(".", "")) * Number(r2.replace(".", "")) / Math.pow(10, m);
return typeof d !== "number" ? Number(resultVal) : Number(resultVal.toFixed(parseInt(d)));
},
Div: function (arg1, arg2) {
var r1 = arg1.toString(),
r2 = arg2.toString(), m, resultVal, d = arguments[2];
m = (r2.split(".")[1] ? r2.split(".")[1].length : 0) - (r1.split(".")[1] ? r1.split(".")[1].length : 0);
resultVal = Number(r1.replace(".", "")) / Number(r2.replace(".", "")) * Math.pow(10, m);
return typeof d !== "number" ? Number(resultVal) : Number(resultVal.toFixed(parseInt(d)));
},
};
function floatAdd(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 (arg1*m+arg2*m)/m;
}
function floatSub(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 ((arg1*m-arg2*m)/m).toFixed(n);
}
function floatMul(arg1,arg2) {
var m=0,s1=arg1.toString(),s2=arg2.toString();
try{m+=s1.split(".")[1].length}catch(e){}
try{m+=s2.split(".")[1].length}catch(e){}
return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m);
}
function floatDiv(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){}
r1=Number(arg1.toString().replace(".",""));
r2=Number(arg2.toString().replace(".",""));
return (r1/r2)*Math.pow(10,t2-t1);
}
function accAdd(arg1, arg2) {
var r1 = deal(arg1);
var r2 = deal(arg2);
var m = Math.pow(10, Math.max(r1, r2))
return(arg1 * m + arg2 * m) / m
}
function accMul(arg1, arg2) {
var m = 0;
m += deal(arg1);
m += deal(arg2);
var r1 = Number(arg1.toString().replace(".", ""));
var r2 = Number(arg2.toString().replace(".", ""));
return(r1 * r2) / Math.pow(10, m)
}
function accDiv(arg1, arg2) {
var t1 = deal(arg1);
var t2 = deal(arg2);
var r1 = Number(arg1.toString().replace(".", ""))
var r2 = Number(arg2.toString().replace(".", ""))
return(r1 / r2) * Math.pow(10, t2 - t1);
}
function deal(arg) {
var t = 0;
try {
t = arg.toString().split(".")[1].length
} catch(e) {}
return t;
}