您的数值太大,无法精确表示为 64 位浮点数。您得到的值是一个近似值。 JavaScript 本身只有 64 位浮点数;价值观do适合一个long
在 C 或 C++ 中可能太大而无法准确表示,因为其中一些 64 位用于浮点表示中的指数。 (权衡是,使用浮点可以使用近似值much比简单整数表示可能的数值更大或更小。)
如果将值作为数字操作并不重要,请将其设为字符串:
console.log("10209761399365907");
或者正如我对最初出现的问题所建议的那样:
<input type="button" value="Invita" onclick="Invite('@us.FacebookID')" />
其中“FacebookID”是有问题的大数字。
有一个常量(在较新的 JavaScript 环境中)称为Number.MAX_SAFE_INTEGER
。这告诉您可以表示多大的数字,以便准确地表示该值;也就是说,64 位浮点尾数将包含整个值的显式位。
Larger even整数可以精确表示,具体取决于其二进制表示形式的低端有多少个零位。因此,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)">
但是当我单击按钮时...该方法接收参数的数量增加了 1!
而且这种情况只发生在一个特定的 ID 上!
例如,使用 10155071933693662 我得到正确的值(10155071933693662)
关于该具体号码我需要了解什么吗?所有这一切真的很奇怪,我想到的唯一解决方法是将值作为字符串传递!