<分区>
console.log(10209761399365907);
为什么这段代码会输出一个大一的数字(10209761399365908 而不是 10209761399365907)?
这只发生在这个特定的数字上。例如,对于 10155071933693662,我得到了正确的值 (10155071933693662)。
我需要了解有关该特定号码的信息吗?我想到的唯一解决方法是将值作为字符串传递。
<分区>
console.log(10209761399365907);
为什么这段代码会输出一个大一的数字(10209761399365908 而不是 10209761399365907)?
这只发生在这个特定的数字上。例如,对于 10155071933693662,我得到了正确的值 (10155071933693662)。
我需要了解有关该特定号码的信息吗?我想到的唯一解决方法是将值作为字符串传递。
最佳答案
您的数值太大,无法准确表示为 64 位 float 。您得到的值是一个近似值。 JavaScript 本身只有 64 位 float ; 确实适合 C 或 C++ 中的 long
的值可能太大而无法准确表示,因为 64 位中的某些位用于浮点表示中的指数。 (权衡是,使用 float 可以使用比简单整数表示大大或小的值的近似值。)
如果将值作为数字操作并不重要,则将其设为字符串:
console.log("10209761399365907");
或者正如我对最初出现的问题所建议的那样:
<input type="button" value="Invita" onclick="Invite('@us.FacebookID')" />
其中“FacebookID”是有问题的大数字。
有一个常量(在较新的 JavaScript 环境中)称为 Number.MAX_SAFE_INTEGER
。这告诉您可以表示多大的数字才能准确表示该值;也就是说,64 位浮点尾数将包含整个值的显式位。
更大的 even 整数可以被精确表示,这取决于它们的二进制表示的低端有多少个零位。因此,1152921504606846800
可以精确表示,因为它在二进制表示的低端有 7 位全零。但是,1152921504606846801
输出为 1152921504606846800
,因为 1
低位无处可去。 (假设未表示的位为零。)
附录:这是所提出问题的(几乎)原始版本,用于解释上面可能令人困惑的示例代码:
我遇到了一个非常奇怪的 Javascript 问题。 我有一些来 self 的服务器的 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)">
但是当我点击按钮时...该方法接收到的参数增加了一个!
而且这只发生在一个特定的 ID 上! 例如,使用 10155071933693662 我得到正确的值 (10155071933693662)
我需要了解有关该特定号码的信息吗?这一切真的很奇怪,我想出的唯一解决方法是将值作为字符串传递!
关于javascript - 为什么这个数字会增加一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40867648/