export function highPrecisionAdd(data1, data2) {// 加法 let r1, r2, m; // 获取每个参数的小数的位数 try { r1 = data1.toString().split(".")[1].length } catch (e) { r1 = 0 } try { r2 = data2.toString().split(".")[1].length } catch (e) { r2 = 0 } // 计算底数为10以最大小数位数为次幂的值 m = Math.pow(10, Math.max(r1, r2)); // 把所有参数转为整数后相加再除以次幂的值 return (Math.round(data1 * m) + Math.round(data2 * m)) / m; } export function highPrecisionReduce(data1, data2) {// 减法 let r1, r2, m, n; // 获取每个参数的小数的位数 try { r1 = data1.toString().split(".")[1].length } catch (e) { r1 = 0 } try { r2 = data2.toString().split(".")[1].length } catch (e) { r2 = 0 } // 计算底数为10以最大小数位数为次幂的值 m = Math.pow(10, Math.max(r1, r2)); //精度长度以最大小数位数为长度 n = (r1 >= r2) ? r1 : r2; return ((data1 * m - data2 * m) / m).toFixed(n); } export function highPrecisionMul(data1, data2) {// 乘法 let m = 0, s1 = data1.toString(), s2 = data2.toString(); // 获取所有参数小数位长度之和 try { m += s1.split(".")[1].length } catch (e) { } try { m += s2.split(".")[1].length } catch (e) { } // 替换掉小数点转为数字相乘再除以10的次幂值 return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m); } export function highPrecisionDiv(data1, data2) {// 除法 let t1 = 0, t2 = 0, r1, r2; // 获取每个参数的小数的位数 try { t1 = data1.toString().split(".")[1].length } catch (e) { } try { t2 = data2.toString().split(".")[1].length } catch (e) { } // 把所有参数的小数点去掉转为整数 r1 = Number(data1.toString().replace(".", "")); r2 = Number(data2.toString().replace(".", "")); return (r1 / r2) * Math.pow(10, t2 - t1); }