javascript - 字符串到数字的转换无法在 javascript 中给出预期的结果

标签 javascript

<分区>

JavaScript 数字本身支持通过 Number#toString() 转换为二进制表示形式方法。为了对二进制表示形式执行一些操作,我将数字转换为二进制表示形式,然后转换为数字,如下所示,

示例 1:

(117).toString(2) => "1110101"

Number("1110101") =>  1110101

示例 2:

(999999).toString(2) => "11110100001000111111"

//I don't understand this
Number("11110100001000111111") => 11110100001000112000

示例 2 如何工作,我预计结果为 11110100001000111111 但我收到了 11110100001000112000。

为什么 Number("11110100001000111111") 返回 11110100001000112000

最佳答案

首先,JS中没有二进制数字格式,只写1和0就可以使用,1110101只是一百万,十万,一百一,而不是117二进制。

JavaScript 使用 IEEE 754 中指定的 double 浮点格式数字,只能安全地表示 -(2^53 - 1)2^53 - 1< 之间的整数。在 JS 中,这称为 Number.MAX_SAFE_INTEGER。如果您并排查看最大整数和您的数字:

9007199254740991
11110100001000111111

很明显,11 quintillion、111 quadtrillion、100 trillion、10 亿、111 010、111 都比 max int 大,所以你肯定会有精度损失。

要从二进制数中获取基数为 10 的整数,您可以将基数作为第二个参数传递给 parseInt:

console.log(parseInt("11110100001000111111", 2))

关于javascript - 字符串到数字的转换无法在 javascript 中给出预期的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52238348/

相关文章:

javascript - 使用 Appbar + 抽屉时遇到问题(Material UI + ReactJS)

Javascript 在使用 IE9 兼容模式的 IE8 中工作,但在安装 IE8 时无法工作

javascript - 如何在多个元素上重用下拉函数或类?

javascript - DevExpress - DevExtreme 图表标签重叠

javascript - 在 webpack 配置文件中使用 babel 插件

javascript - Array.prototype.splice() 在迭代时不删除对象

javascript - Typescript Convert Object to Array - 因为 *ngFor 不支持对象的迭代

javascript - 是否可以使用 Node.js 或其他一些服务器端 JavaScript 方法开发 Google App Engine Web 应用程序?

javascript - Angularjs ng-href 错误?

javascript - 如何使分钟值在秒达到 60 后从 0 开始?