js小数运算误差

在JavaScript中,小数运算可能会出现误差,因为计算机内部处理小数时的二进制转换会导致精度问题。例如,0.1 + 0.2 不等于 0.3。可以使用`toFixed(n)`进行四舍五入,但结果不精确;或者通过数字升级和降级(乘以10的幂)来避免误差,这种方法更推荐。
摘要由CSDN通过智能技术生成

在使用某个公众号的web页面购物时,发现了购物车结算时一长串的小数,实际上结算金额应该是小数不超过两位。于此同时也很好的让我在做毕业设计时很好的规避了这个问题。我们来看看js小数运算的问题:

console.log(0.1+0.2);

输出结果是:

为什么会出现这种问题呢?我们都知道计算机的世界里只有二进制,十进制小数转二进制的方法我们都知道“乘基取整,正序排列”:

0.1转二进制为:0.0001100011……无限循环

0.2转二进制为:0.00110011……无限循环

而计算机是不允许无限循环的,它会进行舍入处理,所以计算前就已经产生误差。实际运用中有两种处理方法:

(1)toFixed(n)方法保留小数,该方法进行了四舍五入处理,所以计算结果不精确。

(2)数字升级的方法(乘以10的n次幂),计算完之后再降级,推荐使用这一种。

小数加法:

    function decAdd(arg1,arg2) {
        var r1,r2,m,c;
        try{
            r1 = arg1.toString().split('.')[1].length;
        }catch (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值