问题这样的:
37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数)
我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998
怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来。
我Google了一下,发现原来这是JavaScript浮点运算的一个bug。
37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数)
我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998
怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来。
我Google了一下,发现原来这是JavaScript浮点运算的一个bug。
比如:7*0.8 JavaScript算出来就是:5.6000000000000005
解决:
根据网上的方法写了一个函数:
/**
* 四则运算方法
*
* @param {}
* numA 第一个数字
* @param {}
* numB 第二个数字
* @param {}
* sign 运算符(+ - * /)
*/
function calculate(numA,numB,sign) {
var m=0,numALen=0,numBLen=0;
try{numALen=numA.toString().split(".")[1].length}catch(e){}
try{numBLen=numB.toString().split(".")[1].length}catch(e){}
if(sign === '+'){
m=Math.pow(10,Math.max(numALen,numBLen));
if(m == 0){
m = 1;
}
return (numA*m+numB*m)/m;
}else if(sign === '-'){
m=Math.pow(10,Math.max(numALen,numBLen));
if(m == 0){
m = 1;
}
return (numA*m-numB*m)/m
}else if(sign === '*'){
m = Math.pow(10,numALen + numBLen) ;
if(m == 0){
m = 1;
}
return Number(numA.toString().replace(".",""))*Number(numB.toString().replace(".",""))/m
}else if(sign === '/'){
m = Math.pow(10,numALen - numBLen) ;
if(m == 0){
m = 1;
}
return (Number(numA.toString().replace(".",""))/Number(numB.toString().replace(".","")) )*m;
}
return 0;
}