解决js计算0.1时不准确问题
const compute = { // 加法运算 accAdd(arg1, arg2) { let r1; let r2; let m; let 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); m = 10 ** Math.max(r1, r2); if (c > 0) { let cm = 10 ** c; if (r1 > r2) { arg1 = Number(arg1.toString().replace('.', '')); arg2 = Number(arg2.toString().replace('.', '')) * cm; } else { arg1 = Number(arg1.toString().replace('.', '')) * cm; arg2 = Number(arg2.toString().replace('.', '')); } } else { arg1 = Number(arg1.toString().replace('.', '')); arg2 = Number(arg2.toString().replace('.', '')); } return (arg1 + arg2) / m; }, // 减法计算 accSub(arg1, arg2) { let r1; let r2; let m; let n; try { r1 = arg1.toString().split('.')[1].length; } catch (e) { r1 = 0; } try { r2 = arg2.toString().split('.')[1].length; } catch (e) { r2 = 0; } m = 10 ** Math.max(r1, r2); // last modify by deeka //动态控制精度长度 n = r1 >= r2 ? r1 : r2; return ((arg1 * m - arg2 * m) / m).toFixed(n); }, // 乘法运算 accMul(arg1, arg2) { let m = 0; let s1 = arg1.toString(); let s2 = arg2.toString(); try { m += s1.split('.')[1].length; } catch (e) {} try { m += s2.split('.')[1].length; } catch (e) {} return (Number(s1.replace('.', '')) * Number(s2.replace('.', ''))) / 10 ** m; }, // 除法运算 accDiv(arg1, arg2) { let t1 = 0; let t2 = 0; let r1; let r2; try { t1 = arg1.toString().split('.')[1].length; } catch (e) {} try { t2 = arg2.toString().split('.')[1].length; } catch (e) {} r1 = Number(arg1.toString().replace('.', '')); r2 = Number(arg2.toString().replace('.', '')); return (r1 / r2) * 10 ** (t2 - t1); } }; module.exports = compute;