javascript - Javascript 中大数的精度

标签 javascript numbers long-integer

我正在练习用阶乘显示大量数字。问题是当结果太大时它总是自动舍入。 这是一个例子:

function extraLongFactorials(n) {
    const rs = [...Array(n)].reduce((a, b, i) => a*(i+1), 1);
    console.log(rs);
}

extraLongFactorials(25);

上述代码的结果是:

1.5511210043330986e+25

当预期输出为

15511210043330985984000000

我尝试使用 toFixed()toLocaleString('fullwide', {useGrouping: false}) 但两者都给出了错误的输出。

15511210043330986000000000

有人知道如何处理这种情况吗?

最佳答案

这应该适用于当前支持 BigInt 的所有浏览器。请注意,BigInt 和 Number 之间的操作不能混合,因此我们必须首先从 BigInt 开始(注意 1n 处的 n 标志)。 StackSnippet 需要 rs.toString() ,因为它伪造了控制台,而伪造的控制台仍然不知道如何从 ES6+ 打印几种较新的数据类型;真正的控制台会知道如何正常打印 BigInt。

function extraLongFactorials(n) {
    const rs = [...Array(n)].reduce((a, b, i) => a*(BigInt(i+1)), 1n)
    console.log(rs.toString())
}

extraLongFactorials(25)

如果您的浏览器支持 BigInt,那么...那么...获取更好的浏览器(或者使用像 this 这样的库,我想。但是获取更好的浏览器。 )

关于javascript - Javascript 中大数的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55235429/

相关文章:

javascript - SharePoint 和 JavaScript - "Open with Explorer"问题

java - 比较整数和基元

mysql - 如何判断一个MySQL进程是否卡住了?

javascript - sequelizejs 关系/关联、hasMany/belongsTo 与定义模型上的引用

javascript - 用于派生 RSA 私钥的数字何时应以 `00` 开头?

javascript - 渲染模板时插入额外字符

python - 如何在 python 中找到偶数阶乘?

php - 从数字中获取值(value)

java - 自守数 - Java 程序

python - 为什么内置 sum 在 "from numpy import *"之后表现错误?