今天做力扣题遇到了一个问题,之前一直用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
标签:内置,数字,Bigint,对象,Number,53,BigInt From: https://www.cnblogs.com/heibaiqi/p/16784604.html