繁体   English   中英

在JavaScript中无法将极大数量增加一个

[英]Unable to increase extremely large number by one in JavaScript

9223372036854775808这个数字增加一个: 9223372036854775808

var number = 9223372036854775808;
var plusOne = number + 1;

这应该产生922337203685477580 9 ,但它产生9223372036854776000。

为什么? 更重要的是,我该如何解决这个问题?

JavaScript中最大的可表示数字(2^53) - 1 ,或者,写出来的, 9007199254740991 您拥有的号码9223372036854775808是该数量的1024倍

如果要使用大于上面的数字,则应使用大整数库。 但是,JavaScript没有内置的,因此您需要自己抓取它。 就个人而言,当我处理涉及非常大数字的事情时,我使用大整数 ,例如Project Euler。

这与JavaScript内部存储数字为(双精度)浮点有关。 随着浮点数的增加,数字变得越来越稀疏,直到你得到不正确的结果,因为下一个可表示的数字超过1(如你的例子中所示)。 要正确处理大数字,您需要使用适当的大数字库,例如javascript-bignum 如果只需要整数,可以使用BigInteger.js

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM