zl程序教程

您现在的位置是:首页 >  前端

当前栏目

JavaScript浮点运算的问题

JavaScript 问题
2023-09-14 08:57:15 时间
span >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;

}