console.log(10209761399365907);

为什么此代码输出的数字大一(10209761399365908而不是10209761399365907)?
仅在此特定数字上发生这种情况。例如,使用10155071933693662,我得到正确的值(10155071933693662)。
我需要知道有关该特定数字的事情吗?我想出的唯一解决方法是将值作为字符串传递。
答案 0 :(得分:18)
您的数值太大,无法完全表示为64位浮点数。你得到的值是近似值。 JavaScript本身只有64位浮点数; 做适合C或C ++中的long
的值可能太大而无法准确表示,因为64位中的一些用于浮点表示中的指数。 (折衷的是,对于浮点数,可以使用 更大或更小的数值幅度的值的近似值,而不是简单的整数表示。)
如果将值作为数字操作并不重要,请将其设为字符串:
console.log("10209761399365907");
或正如我最初提出的问题所建议的那样:
<input type="button" value="Invita" onclick="Invite('@us.FacebookID')" />
其中“FacebookID”是有问题的大号。
有一个名为Number.MAX_SAFE_INTEGER
的常量(在较新的JavaScript环境中)。这告诉你你可以表示的数字有多大,以便精确地表示该值;也就是说,64位浮点尾数将包含整个值的显式位。
可以精确地表示较大的偶数整数,具体取决于它们的二进制表示的低端有多少个零位。因此,1152921504606846800
可以精确表示,因为它在二进制表示的低端有7位全零。但是,1152921504606846801
标记为1152921504606846800
,因为低1
位无处可去。 (未表示的位被假定为零。)
附录:以下是提出的问题的(差不多)原始版本,以解释上面可能令人困惑的示例代码:
我遇到的Javascript问题非常奇怪。 我有一些ID来自我的服务器,当我按下按钮时,参数被传递给一个方法来执行请求。
这是代码:
<script type="text/javascript">
function Invite(id)
{
alert(id);
}
</script>
另一方面,我有:
(CSHTML语法)
<input type="button" value="Invita" onclick="Invite(@us.FacebookID)" />
那变成了:
<input type="button" value="Invita" onclick="Invite(10209761399365907)">
但是当我点击按钮时......方法接收参数的数字由ONE增加!
这只发生在一个特定的身份证上! 例如,使用10155071933693662我得到了正确的值(10155071933693662)
我需要知道有关该特定数字的事情吗?所有这一切都很奇怪,我想出的唯一解决方法是将值作为字符串传递!