您当前的位置: 首页 > 

【03】

暂无认证

  • 2浏览

    0关注

    196博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

js如何计算超大整数

【03】 发布时间:2020-11-29 21:02:28 ,浏览量:2

认识最值
// 最大值
Number.MAX_VALUE // 1.7976931348623157e+308
// 最大安全整数
Number.MAX_SAFE_INTEGER // 9007199254740991
// 最小值
Number.MIN_VALUE // 5e-324
// 最小安全整数
Number.MIN_SAFE_INTEGER // -9007199254740991

所谓安全整数,就是不在安全整数范围内计算就会不安全,以下为一个最大安全整数加法运算案例

很明显,计算结果超出了安全范围,他的值就出现了问题

实现在安全整数外进行精确操作数值
sumBigNums(a, b) {
        let carry = 0, res = ' ';
        a = a.toString().split("");
        b = b.toString().split("");
        while (a.length || b.length) {
          carry += ~~a.pop() + ~~b.pop();
          res = (carry % 10) + res;
          carry = carry > 9;
        }
        return res.replace(/^0+/, '');
      }

以上代码只实现了正整数+正整数

实现思路:

首先将超大数转为字符串,保证了相对值在数学表示上不会发生改变

初始化res, carry变量来存储a b的最后一位相加的结果,在将两个字符串split为数组,以便进行每一位的运算

循环体内 首先 进行 最后一位 的运算,将二者最末尾的两个数相加,由于每一位数字是0 - 9,相加可能存在进位,如果进位,res拼接进位后的个位,carry保存当前是否进位。

如果carry为true,表示上一次计算进位了,按循环顺序,当前刚好又是上一次的进位计算,正好可以把上次的进位加入到这次

一直循环,直到结束

最后将计算的字符串结果去除0开头

就此,可以推理出负数运算,以及其他加减乘除运算,都是基于字符串的操作

关注
打赏
1657344724
查看更多评论
立即登录/注册

微信扫码登录

0.0524s