购物车计算总价,为什么有时候会出现小数?

我在 vue 的 computed 中计算购物车总价,代码如下:


computed:{


  AllPrice: function () {

   let totalPrice = 0;

   for (let k in this.tickets) {

     totalPrice += Number(this.tickets[k].price) * Number(this.tickets[k].number)

   }

     console.log(totalPrice);

   return totalPrice;

  }

}

但是打印出来的结果却是这样的:

https://img1.mukewang.com/5c83607e0001627a06590668.jpg

当出现这个小数点后很长一段的数字时应付金额就不显示了,实际计算结果也不是这个 ,不知道为啥, 新手求指点一下,十分感谢!

侃侃无极
浏览 859回答 3
3回答

慕田峪4589230

JavaScript对小数运算会先转成二进制,运算完毕再转回十进制,过程中会有丢失,不过不是所有的小数间运算会有这个问题解决办法:一、先把需要运算的小数扩大成整数,运算后在缩小相同倍数。二、使用toFixed()

哆啦的时光机

var a = 0.1;var b = 0.2;console.log(a + b); //0.30000000000000004console.log((a * 10 + b * 10) / 10); //0.3

缥缈止盈

虽然题主已经采纳了答案了,但是我还是要根据我以往的经验来分享一下建议使用bignumber这个库。题主的具体业务可以决定使用 * 10 ^n / 10 ^n的方式,但我就举一个例子,将320.21小时转换成x天x小时形式,我们希望得到的结果是13天8.21小时var input = 320.21;var day = Math.floor(input / 24); // day == 13var hour = (input - 24 * day) * 100 / 100; //badvar hour2 = (input * 100 - 24 * day * 100) / 100; // bad//结果会是类似这个结果:8.209999999999964那么如果使用bignumber呢var input = 320.21;var bg = new BigNumber(input);var day = Math.floor(input / 24); var hour = bg.minus(day * 24);console.log(day + 'D' + hour + 'H');jsfiddle
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript