在使用某个公众号的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 (e){
r1 = 0;
}
try{
r2 = arg2.toString().split('.')[1].length;
}catch (e){
r2 = 0;
}
c = Math.abs(r1 - r2);

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

被折叠的 条评论
为什么被折叠?



