小数点精度

// 相乘
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)
}

 

posted @ 2023-01-04 15:32  日升月恒  阅读(33)  评论(0编辑  收藏  举报