JavaScript 处理大数相加问题

964 阅读1分钟

JavaScript 处理大数相加问题

  • 问题:

    • JavaScript的Number类型遵循IEEE 754规范表示,意味着JavaScript能精确表示的数字有限,可以精确到个位的最大整数是9007199254740992,即2的53次方,超过这个范围数据的精度就会丢失,造成JavaScript无法其判断准确大小。
  • 解决方案:

    • 数字很大的时候用 number 类型无法表示,就用字符串形式表示,转成字符串形式之后分割,依次最后一位进行相加,相加之后确认是否需要进位,类型转为字符串,下次相加把进上来的数字相加进去。
  • ~~代表双非按位取反运算符,对于正数,它向下取整;对于负数,向上取整;非数字取值为0

function sumBigNumber(a, b) {
            var res = '';
            var temp = 0;
            // 分割成字符串
            a = a.split('');
            b = b.split('');
            while (a.length || b.length || temp) {
                //双非按位取反
                temp += ~~a.pop() + ~~b.pop();
                res = (temp % 10) + res;
                temp = temp > 9;
            }
            return res.replace(/^0+/, '');
        }
        var sum1 = '123123123123123';
        var sum2 = '567567567567567';
        console.log(sumBigNumber(sum1, sum2));
       console.log(Infinity);