js数值相加的精度问题解决

//封装计算精度问题
    add(num1, num2) {
      //将数字转换成字符串
      num1 = num1.toString();
      num2 = num2.toString();

      //获取小数点的位置
      var index1 = num1.indexOf(".");
      var index2 = num2.indexOf(".");

      //如果小数点存在,那么就再获取各自的小数位数
      var ws1 = 0;
      var ws2 = 0;
      if (index1 != -1) {
        ws1 = num1.split(".")[1].length;
      }
      if (index2 != -1) {
        ws2 = num2.split(".")[1].length;
      }

      //看谁的小数位数大,谁的小数位数小

      var bigger = ws1 > ws2 ? ws1 : ws2;
      var smaller = ws1 < ws2 ? ws1 : ws2;

      //计算得到需要补齐的的0的个数
      var zerosCount = bigger - smaller;

      //全部去除小数点
      num1 = num1.replace(".", "");
      num2 = num2.replace(".", "");

      //比较num1 和num2的值谁比较大,比较方法是看谁是smaller,是smaller的一方就补0
      if (ws1 == smaller) {
        for (var i = 0; i < zerosCount; i++) {
          num1 += "0";
        }
      } else {
        for (var i = 0; i < zerosCount; i++) {
          num2 += "0";
        }
      }
      //开始计算
      var sum = parseInt(num1) + parseInt(num2);

      //根据较大的小数位数计算倍数
      var beishu = 1;
      for (var i = 0; i < bigger; i++) {
        beishu = beishu * 10;
      }
      sum = sum / beishu;
      return sum;
    },
//最后进行调用
console.log(this.add(0.1,0.2))

以上就能解决各种的数值相加导致的精度问题了,乘除计算的话在上面的计算环节进行适当修改就好了,屡试不爽哦。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值