为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

侃侃无极 2019-03-06 17:20:49
我在 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;  }}但是打印出来的结果却是这样的:当出现这个小数点后很长一段的数字时应付金额就不显示了,实际计算结果也不是这个 ,不知道为啥, 新手求指点一下,十分感谢!
查看完整描述

3 回答

?
慕田峪4589230

TA贡献1条经验 获得超0个赞

JavaScript对小数运算会先转成二进制,运算完毕再转回十进制,过程中会有丢失,不过不是所有的小数间运算会有这个问题

解决办法:

一、先把需要运算的小数扩大成整数,运算后在缩小相同倍数。

二、使用toFixed()

查看完整回答
反对 回复 2019-11-01
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

var a = 0.1;

var b = 0.2;

console.log(a + b); //0.30000000000000004

console.log((a * 10 + b * 10) / 10); //0.3


查看完整回答
反对 回复 2019-03-09
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

虽然题主已经采纳了答案了,但是我还是要根据我以往的经验来分享一下
建议使用bignumber这个库。
题主的具体业务可以决定使用 * 10 ^n / 10 ^n的方式,但我就举一个例子,
将320.21小时转换成x天x小时形式,我们希望得到的结果是13天8.21小时

var input = 320.21;

var day = Math.floor(input / 24); // day == 13

var hour = (input - 24 * day) * 100 / 100; //bad

var 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

查看完整回答
反对 回复 2019-03-09
  • 3 回答
  • 0 关注
  • 858 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号