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)
}