如何在JavaScript中将BigInt转换为Number?
如何将BigInt转换为数字在JavaScript中?
你可以使用parseInt或Number
const large = BigInt(309); const b = parseInt(large); console.log(b); const n = Number(large); console.log(n);
出于性能原因,我建议不要使用parseInt。是的,根据规范,parseInt和Number都应该通过将BigInt转换为字符串,然后再转换为数字来执行转换。然而,parseInt的语义与Number的语义相比,尤其是考虑到BigInt(number)会产生一个BigInt,这使得浏览器厂商更有可能对Number(bigValue)应用更多的优化,以跳过内部的字符串化过程。因此,我建议在性能方面使用Number而不是parseInt。
请参阅stackoverflow.com/questions/4090518/…,在某些情况下,parseInt可能更好。
很抱歉,我不明白。我同意parseInt和Number有不同的行为,但是对于将BigInt转换为数字的目的,我想不到它们会有任何不同的情况。也许您可以提供一个示例,说明Number和parseInt在将BigInt转换为数字时的区别,以启发我。非常感谢。
在这种BigInts的情况下,您是完全正确的,我需要证明的是parseInt和Number具有不同的行为,您可以在上面的链接中看到示例。
_Al-thamary:在使用parseInt时,最佳实践是使用基数。如果BigInt的值过大而无法表示为数字,则转换将导致精度丢失,甚至可能返回NaN,并且parseInt会导致TypeError。
const tooBigIntValue = BigInt(Number.MAX_SAFE_INTEGER) + BigInt(1); const convertedValue = Number(tooBigIntValue); console.log(tooBigIntValue); // 9007199254740993n console.log(convertedValue); // NaN const convertedValue_parseInt = parseInt(tooBigIntValue)+ BigInt(1); console.log(convertedValue_parseInt); // TypeError
以上是如何在JavaScript中将BigInt转换为数字的问题的原因和解决方法。
如何在JavaScript中将BigInt转换为Number?
在JavaScript中,BigInt是一种用于表示任意精度整数的数据类型。然而,有时候我们可能需要将BigInt转换为Number类型。上面的讨论中提到了两个静态方法可以实现这个目的:
1. BigInt.asIntN()
- 将一个BigInt值转换为带符号整数值,并返回该值。
2. BigInt.asUintN()
- 将一个BigInt值转换为无符号整数值,并返回该值。
然而,实际测试发现这两个方法并不返回Number类型的值,而是仍然返回BigInt类型的值。这些方法的命名可能会让人误解,因为它们中的N
似乎暗示着Number
,但实际上它们仍然返回BigInt类型的值。通过运行typeof BigInt.asIntN(64, 1n)
可以看到它报告的结果是bigint
。
关于这个命名的解释是,“intN”是“int32”、“int64”、“int555”等的泛化;或者换句话说,“intN”是“N位整数”的缩写。这个N的值是函数的第一个参数。另一种规范可能会提供BigInt.asInt64(x)
和BigInt.asInt32(x)
,但为了最大的灵活性,决定使用单个BigInt.asIntN(N, x)
。
所以,as(Ui|I)ntN
并不是你所声称的,也不能回答问题。这些函数接受一个BigInt,并返回一个对2^N取模的BigInt。
因此,目前在JavaScript中没有直接将BigInt转换为Number的方法。如果需要将BigInt转换为Number,可以使用Number()
函数或valueOf()
方法来实现。
在JavaScript中,要将BigInt转换为Number非常简单,只需要将其传递给Number构造函数即可:
const myBigInt = BigInt(10); // `10n`也可以 const myNumber = Number(myBigInt);
当然,你需要记住,你的BigInt值必须在[Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER]范围内才能正确进行转换,正如问题中所述。
我想知道为什么+myBigInt还没有得到支持。