js中数量数字数值运算后值不对的解决方法

  

  

37.5 * 5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数)

  

我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:

206.08499999999998   

怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来。

  

我谷歌了一下,发现原来这是JavaScript浮点运算的一个错误。

  

比如:7 * 0.8 JavaScript算出来就是:

5.6000000000000005   

  

下面就把这些方法摘录下来,以供遇到同样问题的朋友参考:

  

     //除法函数,用来得到精确的除法结果//说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。//调用:accDiv (__arg1、最长)//返回值:__arg1除以最长的精确结果   函数accDiv (__arg1、最长){   var t1=0, t2=0, r1, r2;   尝试{t1=arg1.toString () .split (“。”) [1] . length}捕捉(e) {}   尝试{t2=arg2.toString () .split (“。”) [1] . length}捕捉(e) {}   (数学){   r1=数量(arg1.toString () .replace (“。”, " "))   r2=数量(arg2.toString () .replace (“。”, " "))   返回(r1/r2) *战俘(10,t2-t1);   }   }//给数量类型增加一个div方法,调用起来更加方便。   Number.prototype。div=函数(arg) {   返回accDiv(这个,arg);   }//乘法函数,用来得到精确的乘法结果//说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。//调用:accMul (__arg1、最长)//返回值:__arg1乘以最长的精确结果   函数accMul (__arg1、最长)   {   var m=0, s1=arg1.toString (), s2=arg2.toString ();   尝试{m +=s1.split (“。”) [1] . length}捕捉(e) {}   尝试{m +=s2.split (“。”) [1] . length}捕捉(e) {}   返回数字(s1.replace(“。”,“)) *数量(s2.replace (“。”,“))/Math.pow(10米)   }//给数量类型增加一个mul方法,调用起来更加方便。   Number.prototype。mul函数=(arg) {   返回accMul (arg);   }//加法函数,用来得到精确的加法结果//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。//调用:accAdd (__arg1、最长)//返回值:__arg1加上最长的精确结果   函数accAdd (__arg1、最长){   var r1, r2, m;   尝试{r1=arg1.toString () .split (“。”) [1] . length}捕捉(e) {r1=0}   尝试{r2=arg2.toString () .split (“。”) [1] . length}捕捉(e) {r2=0}   m=Math.pow (10, Math.max (r1, r2))   返回(__arg1 * m +最长* m)/m   }//给数量类型增加一个添加方法,调用起来更加方便。   Number.prototype。添加=function (arg) {   返回accAdd (arg);   }      之前      

        函数accSub (__arg1、最长){   var r1, r2, m, n;   尝试{r1=arg1.toString () .split (“。”) [1]。长度}捕捉(e) {r1=0}   尝试{r2=arg2.toString () .split (“。”) [1]。长度}捕捉(e) {r2=0}   m=数学。战俘(10、数学。马克斯(r1, r2));//最后修改deeka//动态控制精度长度   n=(r1祝辞=r2) & # 63;r1, r2;   返回((__arg1 * m -最长*米)/m) .toFixed (n);   }      之前      

在你要用的地方包含这些函数,然后调用它来计算就可以了。

  

比如你要计算:7 * 0.8,则改成(7).mul (8)

  

其它运算类似,就可以得到比较精确的结果。

  

以上这篇js中数量数字数值运算后值不对的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

js中数量数字数值运算后值不对的解决方法