如何在 javascript 中获取精度高于 21 的数字?
我收到这个号码 8.426661309628124e+22
什么时候应该是这样 8.4266613096281243382112
当我使用 toPrecision(21) 时,我得到了这个 8.42666130962812428616e+22
// my result is a result of this calculation
var val=10;
feb=[0,1];
for(var i=2; i<=val; i++){
feb[i]= feb[i-2] + Math.pow(feb[i-1],2);
}
console.log(feb[val-1])
最佳答案
由于 JavaScript 的内部数字表示 (double-precision floating point) 的精度有限,您需要现有的大整数库之一来克服此限制。
例如,您可以使用 bignumber.js
:
// Configure to (almost) never use scientific notation:
BigNumber.config({ EXPONENTIAL_AT: 1e+9 });
var val=10;
// Store the feb numbers as BigNumber instances:
feb=[new BigNumber(0), new BigNumber(1)];
for(var i=2; i<=val; i++){
feb[i] = feb[i-2].plus(feb[i-1].toPower(2));
console.log(feb[i].toString());
}
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/4.0.2/bignumber.min.js"></script>
请注意,某些其他语言会自动提供大整数,例如 Python:
val=10
feb=[0,1]
for i in range(2, val+1):
feb.append(feb[i-2] + feb[i-1] ** 2)
print(feb[i])
查看它在 repl.it 上运行.
关于javascript - 如何在 javascript 中获取精度高于 21 的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44121448/