javascript - 为什么这个数字会增加一个?

标签 javascript numbers

<分区>

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)">

但是当我点击按钮时...该方法接收到的参数增加了一个!

Alert from CODE

而且这只发生在一个特定的 ID 上! 例如,使用 10155071933693662 我得到正确的值 (10155071933693662)

我需要了解有关该特定号码的信息吗?这一切真的很奇怪,我想出的唯一解决方法是将值作为字符串传递!

关于javascript - 为什么这个数字会增加一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40867648/

相关文章:

javascript - 将简单的 ajax 调用转换为使用 promise jQuery/AngularJS

javascript - ASP.Net - 无效的 Json 字符串

java - 查找文件中最大的数字

oracle - oracle varchar转换为数字

ios - 如何在ios中生成不重复的随机数?

javascript - Node.js - child_process 和集群混淆

javascript - JavaScript 的扩展性如何?

javascript - 如何将 limit 和 startAt 应用于 firestore 文档的子项目

java - 从字符串中获取第二大数字的函数

PHP - 在数字之间添加空格的正确方法?