做条形图统计计算时,往往js计算“-”后再无法相“+”等于100%或者说等于1,后来发现是js使用减号“-”或加号“+”计算有误差
相关代码:
this.standard = 99.68
this.nonstandard = 100 - this.standard
console.info("this.nonstandard:",this.nonstandard)
//进一法 this.nonstandard = ((this.nonstandard * 100) | 0) / 100
console.info(" 进一法 this.nonstandard:",this.nonstandard)
控制台打印: this.nonstandard 0.3199999999999932 进一法 this.nonstandard 0.31 //之前出错时0.33,现在想复现之前的问题又出现0.31,总之standard变量存的数和nonstandard变量存的数合计不等100
正确处理方式:
add、reduce是传入的加减数字,reduce是被加数(被减数),s是加减符号
formatNum(add, reduce, s, num) {
let m = Math.pow(10, num); //num是10的次幂
let res = s == '+' ? (add * m + reduce * m) / m : (add * m - reduce * m) / m;
return Math.round(res * m) / m;
}
在浮点数计算的时候,很多时候产生的都是这种极限数据,如果要精确进行整数转换,要放大的倍数够大
调用此函数即可计算出正确结果
this.standard=99.68
this.nonstandard = this.formatNum(100, this.standard, '-', 2) console.info('========this.nonstandard', this.nonstandard)
控制台打印: ========this.nonstandard 0.32
正确展示: