js 小数计算失去精度
原因:小数计算会转化为二进制 精度丢失
举个例子:4.02*10的N次方 怎么算都是错的; 常见问题 0.1+0.2 !=0.3 。。。
处理:转化为小数进行计算
//加法 function addNum (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)),(multiNum(a,e) + multiNum(b,e)) / e; } //减法 function subNum (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)),(multiNum(a,e) - multiNum(b,e)) / e; } //乘法 function multiNum (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); } //除法 function divide (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)); }
To b or not To b
is Not a Q