收藏
回答

小程序为什么计算 917.52 - 1000= -82.48000000000002?

小程序为什么计算 917.52 - 1000= -82.48000000000002?

其他的计算都没有问题,就这一个有问题,

如图所示,图中为console.log显示的结果


数据是从数据库中读取的,源代码如下:

var that = this;
    wx.cloud.callFunction({
      name: 'getMoney',
      data: {
        objThisId: that.data.thisId,
      },
      complete: function (res) {
        try {
          var objNub = res.result.data.length
          //获取数据量
          if (objNub > 0) {
            //获取数据
            for (let i = 0; i < objNub; i++) {
              if (res.result.data[i].moneyBool == "true") {
                objlbMoney = objlbMoney + parseFloat(res.result.data[i].money);
                objlbIncome = objlbIncome + parseFloat(res.result.data[i].money);
                console.log("原余额:" + objlbMoney)
                console.log("原收入:" + objlbIncome)
                console.log("收入:" +parseFloat(res.result.data[i].money))
                console.log("---------------")
              }
              else if (res.result.data[i].moneyBool == "false") {
                objlbMoney = objlbMoney - parseFloat(res.result.data[i].money);
                objlbExpend = objlbExpend - parseFloat(res.result.data[i].money);
                console.log("原余额:" + objlbMoney)
                console.log("原支出:" + objlbExpend)
                console.log("支出:" +parseFloat(res.result.data[i].money))
                console.log("---------------")
              }
            }
          }
          //查询错误
          else if (objNub < 0) {
            console.log('查询结果:' + objNub)
            console.log('系统错误!')
            wx.switchTab({
              url: '../index/home',
            })
          }
          that.setData({
            lbMoney: objlbMoney,
            lbIncome: objlbIncome,
            lbExpend: objlbExpend,
          })
        } catch (e) {
          console.log('调用云函数错误!')
          wx.switchTab({
            url: '../index/home',
          })
        }
      }
    })


回答关注问题邀请回答
收藏

7 个回答

  • ahaha
    ahaha
    2019-10-22

      accSub: function(arg1, arg2) {
        var r1, r2, m, n, rtn;
        try {
          r1 = arg1.toString().split(".")[1].length;
        } catch (e) {
          r1 = 0;
        }
        try {
          r2 = arg2.toString().split(".")[1].length;
        } catch (e) {
          r2 = 0;
        }
        m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度
        n = (r1 >= r2) ? r1 : r2;
        rtn = ((arg1 * m - arg2 * m) / m);
        return rtn.toString();
      }

    2019-10-22
    有用
    回复 3
    • ahaha
      ahaha
      2019-10-22
      自己之前要弄加减乘除,从网上找了找,这是减法的
      2019-10-22
      回复
    • ahaha
      ahaha
      2019-10-22
      js的精度问题
      2019-10-22
      回复
    • ahaha
      ahaha
      2019-10-22
      加减乘除都会有精度问题,toFiex也会有,所以有涉及这些,要注意
      2019-10-22
      回复
  • 铭锋科技
    铭锋科技
    2019-10-22

    (917.52*100 - 1000*100)/100

    2019-10-22
    有用
    回复
  • 啊喵
    啊喵
    2019-10-22

    js都这样,小数加减都先乘以10的最大小数位数次方,运算后再除回来

    2019-10-22
    有用
    回复
  • 九歌^
    九歌^
    2019-10-22

    了解下精度问题。

    2019-10-22
    有用
    回复
  • var 友原
    var 友原
    2019-10-22

    经典问题了,建议百度了解下

    2019-10-22
    有用
    回复
  • 2019-10-22
    浮点数都有精度问题。浮点数转成二进制数据的过程建议你看一下
    2019-10-22
    有用
    回复
  • 卢霄霄
    卢霄霄
    2019-10-22

    你在console里试试 0.1+0.2呢

    2019-10-22
    有用
    回复 1
    • い小杨
      い小杨
      2019-10-22
      求 怎么解决
      2019-10-22
      回复
登录 后发表内容
问题标签