问题描述
如果我问你,4330.61乘以100等于多少,我猜你肯定跟我说:“肯定是 433061”啊!
是啊,要我我也是这么回答,来来来我们来看看浏览器怎么说吧,如下图
浏览器告诉我,他就是算不对
偌!浏览器告诉我,他就是算不对,这要是给客户算钱,客户不就有意见了....
WHY?计算机计算出来的还不如我自己的心算呢!!!!
如果你想了解什么原因,您请看=>js浮点数精度问题的前世今生?
解决办法
;(function(){ ?function mathService(){ ???this.add=function(a,b){ ?????var c, d, e; ?????try { ???????c = a.toString().split(".")[1].length; ?????} catch (f) { ???????c = 0; ?????} ?????try { ???????d = b.toString().split(".")[1].length; ?????} catch (f) { ???????d = 0; ?????} ?????return e = Math.pow(10, Math.max(c, d)), (this.mul(a, e) + this.mul(b, e)) / e; ??} ??this.mul=function(a, b) { ?????var c = 0, ???????d = a.toString(), ???????e = b.toString(); ?????try { ???????c += d.split(".")[1].length; ?????} catch (f) {} ?????try { ???????c += e.split(".")[1].length; ?????} catch (f) {} ?????return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c); ???} ??this.sub=function(a,b){ ????var c, d, e; ????try { ??????c = a.toString().split(".")[1].length; ????} catch (f) { ??????c = 0; ????} ????try { ??????d = b.toString().split(".")[1].length; ????} catch (f) { ??????d = 0; ????} ????return e = Math.pow(10, Math.max(c, d)), (this.mul(a, e) - this.mul(b, e)) / e; ??} ??this.div=function(a, b) { ????var c, d, e = 0, ??????f = 0; ????try { ??????e = a.toString().split(".")[1].length; ????} catch (g) {} ????try { ??????f = b.toString().split(".")[1].length; ????} catch (g) {} ????return c = Number(a.toString().replace(".", "")), d = Number(b.toString().replace(".", "")), this.mul(c / d, Math.pow(10, f - e)); ??} ?} ?window.mathService=new mathService()})(window);
来来来,用起来
image.png
Ok!写完收工!!!
作者:小枫学幽默
链接:https://www.jianshu.com/p/c3374517b976
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
黄聪:JS数学计算精度修正
原文地址:https://www.cnblogs.com/huangcong/p/9402452.html