小数点精度
// 相乘 export function multiplicationFn(mulArr = [], decimal) { let decLen = 0; // 相乘数的小数点总长度 let tNum = 1; // 相乘后的总数 mulArr.forEach(ele => { const valArr = (ele || 0).toString().split('.'); decLen += valArr[1]? valArr[1].length : 0; tNum = tNum * valArr.join(''); // 转换成整数 }) const multiplePow = Math.pow(10, decLen) tNum = tNum / multiplePow if (decimal || decimal === 0) { return Number(tNum.toFixed(decimal)) } return Number(tNum) } // 相除 - 除以10的倍数(换算用) export function dividedFn(dividend, divisor, decimal) { let nDecLen = divisor || 0; // 除数- 10的次方数,如除1则为0,除10则为1 const valArr = (dividend || 0).toString().split('.'); // 被除数转成整数 nDecLen += valArr[1]? valArr[1].length : 0; const dividePow = Math.pow(10, nDecLen); let dNum = valArr.join('') / dividePow; if (decimal || decimal === 0) { return Number(dNum.toFixed(decimal)) } return Number(dNum) } // 相加 export function accumulationFn(addArr = [], decimal) { let tNum = 0; // 相加后的总数 const decimalArr = addArr.map(n => { const valArr = (n || 0).toString().split('.'); return valArr[1]? valArr[1].length : 0; }) // 获取最大的小数点长度 const maxDecimal = Math.max.apply(null, decimalArr); const addPow = Math.pow(10, maxDecimal); addArr.forEach(ele => { tNum += Math.round(ele * addPow); }) tNum = tNum / addPow; if (decimal || decimal === 0) { return Number(tNum.toFixed(decimal)) } return Number(tNum) } // 相减 export function subtractFn(subArr = [], decimal) { const decimalArr = subArr.map(n => { const valArr = (n || 0).toString().split('.'); return valArr[1]? valArr[1].length : 0; }) // 获取最大的小数点长度 const maxDecimal = Math.max.apply(null, decimalArr); const subPow = Math.pow(10, maxDecimal); let sNum = subArr.splice(0, 1)[0] || 0; // 相减的数,初始值为数组的第一个值 sNum = Math.round(sNum * subPow); subArr.forEach(ele => { sNum -= Math.round(ele * subPow); }) sNum = sNum / subPow; if (decimal || decimal === 0) { return Number(sNum.toFixed(decimal)) } return Number(sNum) }