将字符串转换为整数时出现错误

Bug when converting string to integer

大家好,我在 Javascript 中解析字符串时遇到问题。 我有一个很大的数字(162778063615164416)作为一个字符串。这就是 discord 的用户 ID 的样子。 现在我试图将它转换为数字,但它总是 return 是错误的值。

运行 要查看的代码段。

var qs = 'querySelector',
    qsa = 'querySelectorAll';
document[qs]('input').addEventListener('input', event => {
  var val = event.target.value;
  document[qsa]('td')[0][qs]('input').value = parseInt(val);
  document[qsa]('td')[1][qs]('input').value = Number(val);
  document[qsa]('td')[2][qs]('input').value = eval(val);
})
<table style="border: solid 1px">
  <thead>
    <tr>
      <th colspan="3"><input value="162778063615164416" style="width:98%; text-align: center"></th>
    </tr>
    <tr>
      <th>parseInt()</th>
      <th>Number()</th>
      <th>eval()</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><input id="parse" style="text-align: center" value="162778063615164400" disabled></td>
      <td><input id="number" style="text-align: center" value="162778063615164400" disabled></td>
      <td><input id="eval" style="text-align: center" value="162778063615164400" disabled></td>
    </tr>
  </tbody>
</table>

我使用了三种不同的方法来做同样的事情,但它们都 return 错误的值。输出值应与输入值相同。 任何人都知道,如何将这个长度的字符串转换为数字?

我正在使用 Node.js 的 Discord API 创建一个自助机器人。用户向频道发送一条消息,程序应该读取用户 ID 来识别它应该回复的唯一一个人。我不能在程序代码中写 ID,因为它是动态的:我想把它打包成一个 .exe,其他人(不知道 JavaScript 或不想安装 Node.js) 也可以用它来发送嵌入和做其他很酷的事情。

使用 parseFloat();它将以指数形式给出结果

您可以使用名为 BigInteger.js 的 JavaScript 库,因为 purpose.it 是 Javascript 的任意长度整数库,允许对无限大小的整数进行算术运算, 尽管内存和时间 limitations.This lib 可以从这个 link.Like var largeNumber = bigInt("75643564363473453456342378564387956906736546456235345"); 下载您可以在此处找到 lib 的文档 https://www.npmjs.com/package/big-integer

已复制

根据 documentation.

The MAX_SAFE_INTEGER constant has a value of 9007199254740991


您应该问问自己为什么要将其转换为数字。你想比较它们吗?你可以比较Strings。您想寻找特殊价值吗?您可以在 Strings 上使用正则表达式。

大于最大安全整数

使用浮点型

console.log(Number.MAX_SAFE_INTEGER > 162778063615164416)