JavaScript之(手搓)BigInt数据类型

本文介绍了JavaScript中的BigInt数据类型限制,作者回忆了使用BigInt转换模块处理大整数的经历,并动手实现了BigInt数组转换和计算,最后指出JavaScript的BigInt不是构造函数,可能存在未知缺陷。
摘要由CSDN通过智能技术生成

偶然在刷算法的时候,遇到了BigInt类型数据的求和(不知道js也有BigInt类型数据)

介绍

JavaScript的十进制数字计算最长只有16位
如题所给的传参是字符串

这让我记起了当时与后端联调的时候所用过的BigInt转化的node_module,当时打印出来的是由数组和字符串组成BigInt参数。就好比 : [‘111111111111111’,‘222222222222222’,‘333’]

虽然忘记多少位为一组了,但是大体上不是15位,就是16位。考虑到假如两组16位的数据求和就会溢出,最大就可能达到17位,所以我选择使用15位。

开搓BigInt

首先写个BigInt数组转换

// 转化为BigInt数组
const bigIntFun = (str) => {
   
    let i = 0
    let sumArr = [...str].reverse().reduce((total, cur, index) => {
   
        if (index % 15 === 0 && index / 15 !== 0) {
   
            i++
        }
        if (!total[i]) {
   
            total[i] = ''
        }
        total[i] += cur
        return total
    }, []).map(item => [...item].reverse().join('')).reverse()
    let j = 0
    while (sumArr[j] <= 0) {
   
        j++
    }
    sumArr.splice(0, j)
    return sumArr.map((item, i) => {
   
        return i === 0 ? +item + '' : item
    })
}
// a, b为两个字符串,随便写都行
let arrA = bigIntFun(a)
let arrB = bigIntFun(b)

然后开始计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BB_zhan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值