大数相加结果出现误差的原因和解决办法

15 min read

大数相加结果出现误差的原因是因为在计算机把数转换成二进制过程中会出现误差,如在处理一些浮点数的时候,运算会产生误差,得到的是类似无限循环。

因此,一些大数相加的结果会出错。 例如:

        var a = 1111111111111119;
        var b = 9999999999999998;
        var c=a+b
        console.log("结果"+c)// 结果:11111111111111116

为了避免这样的错误出现,当大数相加时应使用这样的方法。

        var a = 1111111111111119;
        var b = 9999999999999998;
        //求c,c=a+b
        let stra = a.toString()//将Number类型转化为String
        let strb = b.toString()//将Number类型转化为String
        var JW=0 //定义变量为零,变量代表进位数值
        var C='' //定义空的字符串,用于字符串的拼接
        //首先对比那个字符串长,并将两个字符串补为相同长度
        if (stra.length >= strb.length) {
            stra = stra.padStart(stra.length + 1, '0');
            strb = strb.padStart(stra.length , '0');
        } else {
            stra = stra.padStart(strb.length + 1, '0');
            strb = strb.padStart(strb.length , '0');
        }
        //两字符串长度相同,从右向左遍历两个字符串
        for(let i=stra.length-1; i>=0;i--){
            console.log('字符A--->'+stra[i]);
            console.log('字符B--->'+strb[i]);
            //将遍历的的第一位字符转化为Number进行运算
            Numc=Number(stra[i])+Number(strb[i])+JW
            //将运算结果除10取整,该整数与下遍历的相加数相加
            var JW=parseInt(Numc/10)
            //将运算结果除10取余,余数为各位的数值
            var QY=Numc-JW*10
            console.log('进位'+JW);
            console.log('取余'+QY);
            将每次遍历的QY转化为字符串进行拼接
            var C=QY.toString()+C
            console.log('字符C--->'+C);
            console.log('-----------------------------');
        }