如何在JavaScript中将BigInt转换为Number?

10 浏览
0 Comments

如何在JavaScript中将BigInt转换为Number?

我发现自己处于这样一种情况:我想将一个 BigInt 值转换为一个 Number 值。既然我知道我的值是一个安全整数,那么我该如何进行转换呢?

0
0 Comments

如何将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转换为数字的问题的原因和解决方法。

0
0 Comments

如何在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()方法来实现。

0
0 Comments

在JavaScript中,要将BigInt转换为Number非常简单,只需要将其传递给Number构造函数即可:

const myBigInt = BigInt(10);  // `10n`也可以
const myNumber = Number(myBigInt);

当然,你需要记住,你的BigInt值必须在[Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER]范围内才能正确进行转换,正如问题中所述。

我想知道为什么+myBigInt还没有得到支持。

参见:github.com/tc39/proposal-bigint/blob/master/…

0