Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Java脚本中的一些大数字问题_Javascript_Biginteger - Fatal编程技术网

Javascript Java脚本中的一些大数字问题

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

这是我面临的一个奇怪的问题。当我将一些大数字传递给JS函数(自定义或内置)时,值会自动递增1。例如,请参见以下内容:

<!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中处理大数字的链接: