JS中使用Math.round(x)来替代toFixed()四舍五入保留1位小数点精度不准确的解决方法

JS中使用Math.round(x)来替代toFixed()四舍五入保留1位小数点精度不准确的解决方法

客户下单时,单价和数量存在两位小数,但总价需要保留一位小数,且需要四舍五入,最先开始在小程序页面的js中使用toFixed(1)函数保留一位小数并四舍五入,经测试没问题,能够正常使用。

但在实际生产环境中,订单量增多的情况下总价会出现很多种比如1.65,22.85等小数点第二位是5的情况下就会发现保留1位小数后并没有四舍五入,得到的值是1.6和22.8,究其原因还是怪自己测试的时候数据量不够全面。

发现问题总是要解决的,查找了很多关于四舍五入的资料发现这方面好像很少有人遇到过这个问题,后来自己改了代码,决定不用toFixed()函数来进行四舍五入保留一位小数了。使用Math.round(x)来进行数值转换。

Math.round(x)中round() 方法可把一个数字舍入为最接近的整数。比如2.5 将舍入为 3,而 -2.5 将舍入为 -2。

那么保留一位小数的情况下我们该如何使用?如下所示:

var f = Math.round(totalPrice * 10) / 10

先将所得的总价先乘以10,然后使用Math.round()函数取最接近的整数后,再除以10就可以得到正确的值了。如1.65*10=16.5,取整后为17,再除以10就得到了1.7,保留1位小数又能够四舍五入了,同理保留两位小数也一样先乘以100取整后再除以100就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值