首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

JavaScript浮点运算的有关问题

2013-10-11 
JavaScript浮点运算的问题问题这样的: 37.5*5.5206.08(JS算出来是这样的一个结果,我四舍五入取两位小数)

JavaScript浮点运算的问题
问题这样的: 
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;}


热点排行