Javascript Java脚本中的一些大数字问题
这是我面临的一个奇怪的问题。当我将一些大数字传递给JS函数(自定义或内置)时,值会自动递增1。例如,请参见以下内容:Javascript Java脚本中的一些大数字问题,javascript,biginteger,Javascript,Biginteger,这是我面临的一个奇怪的问题。当我将一些大数字传递给JS函数(自定义或内置)时,值会自动递增1。例如,请参见以下内容: <!DOCTYPE html> <html> <body> <p>Click the button to display an alert box.</p> <button onclick="myFunction()">Try it</button> <script> funct
<!DOCTYPE html>
<html>
<body>
<p>Click the button to display an alert box.</p>
<button onclick="myFunction()">Try it</button>
<script>
function myFunction()
{
alert(10466511635124471);
}
</script>
</body>
</html>
单击按钮以显示警报框
试试看
函数myFunction()
{
警报(10466511635124471);
}
在警报中,我看到的是10466511635124472
,而不是10466511635124471
。有人能解释这种行为吗
我已经在FF 17.0.10、Chrome 12.0.742.122和IE 8中对此进行了检查。这与1的性质有关()——您的数字10 466 511 635 124 471大于可表示为连续数字的最高正整数253(9 007 199 254 740 992)。JavaScript中数字的64位用1位表示符号,52位表示数字(指数的特殊行为有效地提高了53位的精度),11位表示指数,这就是为什么会出现这种情况 当您的数字超过此最大值时,它将使用大于1的指数来表示此值,这将导致最小可能的表示降低。如果指数为2(如您的例子所示),则数字中最小的可微变化将为2,并且由于您的数字介于这两者之间,因此将四舍五入到最接近的数字 JavaScript没有任何任意大小的整数格式,也不支持类似于
BigNum
(使用Java术语)或任意精度算法的任何内容。如果要存储较大的数字,则必须使用其他存储方法,例如字符串
1:我已经链接到维基百科,因为实际的规范需要花费金钱才能合法/正式获得——如果有人有更好的来源,请编辑它。Javascript不支持大整数。它使用64位浮点来存储数字、精度、符号和指数 一个好的做法是使用以下数字的字符串表示:
alert("10466511635124471");
请注意来自Facebook graph api的JSON响应:
所有小于32位整数的数字仍然是整数,但由于facebook用户将64位整数作为其ID,它们已被转换为字符串:
Javascript中允许的最大正数为1.79E+308。
您使用的数字(10466511635124471)大于larget+ve数字。这可能是得到答案为10466511635124472的原因。这里基本上是在给定范围内递增所有奇数…尝试10466511635124472它将显示正确的值,这就是我观察到的。老实说,我不知道why@Arun:不一定,那是误导。到目前为止给出的答案很好地解释了发生的事情。不过,为了方便起见,这是一个关于如何在JS中处理大数字的链接: