天天看點

java浮點加減乘除異常,解決JS浮點數(小數)計算加減乘除的BUG

加法函數,用來得到精确的加法結果

function accAdd(arg1, arg2) {

var r1, r2, m, c;

try {

r1 = arg1.toString().split(".")[1].length;

}

catch (e) {

r1 = 0;

}

try {

r2 = arg2.toString().split(".")[1].length;

}

catch (e) {

r2 = 0;

}

c = Math.abs(r1 - r2);

m = Math.pow(10, Math.max(r1, r2));

if (c > 0) {

var cm = Math.pow(10, c);

if (r1 > r2) {

arg1 = Number(arg1.toString().replace(".", ""));

arg2 = Number(arg2.toString().replace(".", "")) * cm;

} else {

arg1 = Number(arg1.toString().replace(".", "")) * cm;

arg2 = Number(arg2.toString().replace(".", ""));

}

} else {

arg1 = Number(arg1.toString().replace(".", ""));

arg2 = Number(arg2.toString().replace(".", ""));

}

return (arg1 + arg2) / m;

}

//給Number類型增加一個add方法,調用起來更加友善。

Number.prototype.add = function (arg) {

return accAdd(arg, this);

};

減法函數,用來得到精确的減法結果

function accSub(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)); //last modify by deeka //動态控制精度長度

n = (r1 >= r2) ? r1 : r2;

return ((arg1 * m - arg2 * m) / m).toFixed(n);

}

// 給Number類型增加一個mul方法,調用起來更加友善。

Number.prototype.sub = function (arg) {

return accMul(arg, this);

};

乘法函數,用來得到精确的乘法結果

function accMul(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);

}

// 給Number類型增加一個mul方法,調用起來更加友善。

Number.prototype.mul = function (arg) {

return accMul(arg, this);

};

除法函數,用來得到精确的除法結果

function accDiv(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 (r1 / r2) * pow(10, t2 - t1);

}

}

//給Number類型增加一個div方法,調用起來更加友善。

Number.prototype.div = function (arg) {

return accDiv(this, arg);

};