Js code
[code]
According to normal calculation, except for the first row (because it cannot be divided by itself), the other should get accurate results. From the pop-up results, we find that it is not what we want. the correct result. In order to solve the problem of inaccurate floating point number operations, we first upgrade the numbers involved in the operation (10 to the power of Now collect and sort them out and post them here for future use.
Addition
Js code
[code]
//Explanation: The addition result of JavaScript will have errors, which will be more obvious when adding two floating point numbers. This function returns a more accurate addition result.
//Call: accAdd(arg1,arg2)
//Return value: the exact result of arg1 plus arg2
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
}
//Add an add method to the Number type to make it more convenient to call.
Number.prototype.add = function (arg){
return accAdd(arg,this);
}
//Explanation: The addition result of JavaScript will have errors. When two floating point numbers are compared, It will be more obvious when added. This function returns a more accurate addition result.
//Call: accAdd(arg1,arg2)
//Return value: the exact result of arg1 plus arg2
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
}
//Add an add method to the Number type to make it more convenient to call.
Number.prototype.add = function (arg){
return accAdd(arg,this);
}
Subtraction
Js code
[code]
//Description : The subtraction result of JavaScript will have errors, which will be more obvious when adding two floating point numbers. This function returns a more accurate subtraction result.
//Call: accSub(arg1, arg2)
//Return value: the exact result of arg1 minus arg2
function accSub(arg1, arg2){
return accAdd(arg1,-arg2) ;
}
//Add a sub method to the Number type to make it more convenient to call.
Number.prototype.sub = function (arg){
return accSub(this,arg);
}
//Explanation: The subtraction result of javascript will have errors. When two floating point numbers are compared It will be more obvious when added. This function returns a more accurate subtraction result.
//Call: accSub(arg1, arg2)
//Return value: the exact result of arg1 minus arg2
function accSub(arg1, arg2){
return accAdd(arg1,-arg2) ;
}
//Add a sub method to the Number type to make it more convenient to call.
Number.prototype.sub = function (arg){
return accSub(this,arg);
}
Multiplication
Js code
//Explanation: The multiplication result of JavaScript will have errors, which will be more obvious when two floating point numbers are multiplied. This function returns a more accurate multiplication result.
//Call: accMul(arg1,arg2)
//Return value: the exact result of arg1 multiplied 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)
}
//Add a mul method to the Number type to make it more convenient to call.
Number.prototype.mul = function (arg){
return accMul(arg, this);
}
//Explanation: The multiplication result of javascript will have errors. When two floating point numbers are compared It will be more obvious when multiplying. This function returns a more accurate multiplication result.
//Call: accMul(arg1,arg2)
//Return value: the exact result of arg1 multiplied 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)
}
//Add a mul method to the Number type to make it more convenient to call.
Number.prototype.mul = function (arg){
return accMul(arg, this);
} Division
Js code
//Explanation: The division result of javascript will have errors. It will be more obvious when dividing two floating point numbers. This function returns a more accurate division result.
//Call: accDiv(arg1,arg2)
//Return value: the 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);
}
}
//Add a div method to the Number type to make it more convenient to call.
Number.prototype.div = function (arg){
return accDiv(this, arg);
}
//Explanation: The division result of javascript will have errors. When two floating point numbers are compared, It will be more obvious when removed. This function returns a more accurate division result.
//Call: accDiv(arg1,arg2)
//Return value: the 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);
}
}
//Add a div method to the Number type to make it more convenient to call.
Number.prototype.div = function (arg){
return accDiv(this, arg);
}
Test it
Js code