js加法计算不缺失精度

112 阅读1分钟
function add(a,b,len=2){
    let [intPartA, decimalPartA] = a.toString().split('.').map(Number);
    let [intPartB, decimalPartB] = b.toString().split('.').map(Number);

    // 把小数换算成相同的位数 
    let intSum = intPartA + intPartB;
    let decimalSum = 0;
    if (typeof decimalPartA!='undefined') {
        while (decimalPartA.toString().length<len) {
            decimalPartA+='0'
        }
        decimalSum += Number(decimalPartA);
    }
    if (typeof decimalPartB!='undefined') {
        while (decimalPartB.toString().length<len) {
            decimalPartB+='0'
        }
        decimalSum += Number(decimalPartB);
    }
    //小数大于1的 加到整数上
    if(decimalSum>=10**len){
        let intPartC=Number(decimalSum.toString().slice(0,-len))
        let decimalPartC=decimalSum.toString().slice(-len)
        intSum+=intPartC
        decimalSum=decimalPartC
    }
    // 把整数和小数用字符串拼接起来  不用除法防止丢失精度 
    return Number(intSum+'.'+decimalSum) 
}

先把小数和整数用字符串方法分开,小数部分要换算成统一的位数进行相加,当超过指定位数需要,截取部分加到整数上处理, 当然最简单的还是 引入第三方