我想求一个大数所有数字的和,例如 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/