阅读背景:

数值、金额类精度丢失问题

来源:互联网 
问题描述 在日常项目中金额等涉及到数值计算的问题,经常会出现在加减乘除后数值精度丢失的问题 分析可能的原因 十进制数的二进制表示形式可能不精确。 使用的数字之间类型不匹配(例如,混合使用浮点型和双精度型)。 解决 //获取小数位数 decNum(a){ let r = 0 a = a.toString() if(a.indexOf(".") !== -1){ r = a.split(".")[1].length } return r }, //type:加减乘除 calc(a,b,type){ let r = 0 let da = this.decNum(a) let db = this.decNum(b) let dsum = da + db let dmin = Math.min(da,db) let dmax = Math.max(da,db) dsum += dmax - dmin dsum = Math.pow(10,dsum) dmax = Math.pow(10,dmax) a = parseInt(a,toString().replace(".","")) b = parseInt(b,toString().replace(".","")) if(da > db){ b *= Math.pow(10,da-db) }else { a *= Math.pow(10,db-da) } switch(type){ case "add": r = (a + b) / dmax break case "subtract": r = (a - b) / dmax break case "multiply": r = (a * b) / dsum break case "divide": r = a / b break } return r } 常见应用 项目中涉及到金额的浮点数数值类型的等会使用 问题描述 在日常项目中金额等涉及到数值计算的问题,经常会出现在加减乘除后数值精度丢失的问题 分析可



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: