Reprinted: http://www.cnblogs.com/liutree/archive/2011/11/29/2267881.html
In js, the multiplication and division of floating-point numbers will have errors. In order to calculate the multiplication and division more accurately, the multiplication and division method needs to be modified.
The division function is used to obtain an accurate division result
Description: The division result of javascript will have errors, which will be more obvious when dividing two floating-point numbers.
Call: accDiv(arg1,arg2)
Return value: exact result of dividing arg1 by arg2
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);
}
}
Multiplication function, used to get accurate multiplication resultsDescription: The multiplication result of javascript will have errors, which will be more obvious when multiplying two floating-point numbers.
Call: accMul(arg1,arg2)
Return value: Exact result of multiplying arg1 by arg2
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)
}
In addition, addition and subtraction
The addition function, used to get the exact addition result
function accAdd(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;
}
Subtract function
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
//Dynamic control precision length
n=(r1>=r2)?r1:r2;
return ((arg2*m- arg1*m)/m).toFixed(n);
}
This article concludes.