做条形图统计计算时,往往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

 

 

 

正确展示:

 

posted on 2024-03-06 18:01  坚持就有光  阅读(19)  评论(0编辑  收藏  举报