javascript - 为什么 BigInt(largeNumber) 仍然不精确?

标签 javascript bigint

我想求一个大数所有数字的和,例如 9995

我应用 BigInt 来获取大数的幂并使用下面的代码将其数字相加。

BigInt(Math.pow(99, 95)).toString().split("").reduce((a, b) => a * 1 + b * 1)

然而,它返回845,但正确答案应该是972

我检查了大数的整数输出。在 JavaScript 中是:

384896078893484848828245256950948459077619561131455404911467313251091009678767971560442267379711545180763198037307737 4162416714994207463122539142978709403811688831410945323915071533162168320

这与正确答案(在 C# 中)不同:

384896078893484861192779580282459678960845115608736603465862795353014812600853425803226738376862748709461096855428669 2697374726725853195657679460590239636893953692985541958490801973870359499

我想知道我的代码中有什么问题导致了差异。

最佳答案

表达式 Math.pow(99, 95) 在解析时已经失去了精度 - 将它转换为 BigInt 之后并没有恢复丢失的精度。

从一开始就使用 BigInts,并使用 ** 而不是 Math.pow 以便求幂:

console.log(
  (99n ** 95n)
    .toString()
    .split('')
    .reduce((a, b) => a + Number(b), 0)
);

关于javascript - 为什么 BigInt(largeNumber) 仍然不精确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56696469/

相关文章:

java - 从命令行传递 -r javascript 后如何使 After Effects 退出

javascript - 根据规范,js 中最大的 BigInt 值是多少

mysql - 在 MySQL 中将二进制字符串转换为 bigint?

Javascript - 如何一次从 Firebase 访问多组项目?

javascript - 单击按钮时显示不同的div

java - 为 BigInteger 赋值

assembly - 我怎样才能将两个数字相加,每个数字有 12 个字节?

java - BigInteger 如何存储

javascript - 禁用和启用 css 过渡以初始化位置

javascript - iisnode 不与 babel 一起工作