将字符串转换为整数时出现错误
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)
大家好,我在 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)