在使用某个公众号的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 (