js的乘法运算为什么不精确呢?

JavaScript022

js的乘法运算为什么不精确呢?,第1张

js含有小数的计算都会有丢失精度的问题

实际上解决的办法就是

把小数转化为整数计算 并同时记住扩大的倍数

最后把结果缩小这个倍数 得到不丢失精度的结果

try catch 就是捕获异常 如果没有捕获肯定会报错

也就是你现在按流程所设想的

但是catch(e){}  是捕获了异常 但是里面并没有任何操作

也就是 越过去了 忽略掉

// 这句就是像将小数点去掉 变成整数 如果没有小数点那就没有变化

// 然后计算之后 缩小 10的m次方倍  也就是之前扩大了的倍数

Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)

try只是捕获错误,被try包围的语句如果出错了也会继续执行下面的。

这里try里面的语句是获取小数位的长度,假如s1是整数的话s1.split(".")[1].length这句会出错。所以忽略这句,继续执行下面的。

如果不用try的话可以改成下面的

function accMul(arg1, arg2) {

    var m = 0,

        s1 = arg1.toString(),

        s2 = arg2.toString(),

        t

    t = s1.split(".")

    // 判断有没有小数位,避免出错

    if (t[1]) {

        m += t[1].length

    }

    t = s2.split(".")

    if (t[1]) {

        m += t[1].length

    }

    return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)

}