BigInt内置对象

今天做力扣题遇到了一个问题,之前一直用Number代表数字但是当数字的长度超过16的时候就会出现不精确的问题,

console.log(Number(['6145390195186705543'));
'6145390195186705000'

查资料,原因:在js中number类型有个最大值(安全值)。为9007199254740992,是2的53次方。如果超过这个值,那么js会出现不精确的问题。

描述:MAX_SAFE_INTEGER 是一个值为 9007199254740991的常量。因为Javascript的数字存储使用了IEEE 754中规定的双精度浮点数数据类型,而这一数据类型能够安全存储 -(2^53 - 1) 到 2^53 - 1 之间的数值(包含边界值)。

解决方法:Bigint。

Bigint是一种内置对象(如Array、Date等),它提供了一种方法来表示大于 2^53 - 1 的整数。这原本是 Javascript中可以用 Number 表示的最大数字。Bigint可以表示任意大的整数。可以用在一个整数字面量后面加 n 的方式定义一个 BigInt ,如:10n,或者调用函数 BigInt()(但不包含 new 运算符)并传递一个整数值或字符串值:

const alsoHuge = BigInt(9007199254740991);
// ↪ 9007199254740991n
 
typeof 1n === 'bigint'; // true

如果相加的话

let k = 5000n;
let b = 3000n;
console.log(k+b);//8000n

 

posted @ 2022-10-12 15:07  黑白棋学弟  阅读(21)  评论(0编辑  收藏  举报