js如何计算超大整数

认识最值

// 最大值
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开头

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值