首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串到数字的转换不能给出javascript中的预期结果。

字符串到数字的转换不能给出javascript中的预期结果。
EN

Stack Overflow用户
提问于 2018-09-08 18:44:16
回答 2查看 158关注 0票数 3

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

例1:

代码语言:javascript
复制
(117).toString(2) => "1110101"

Number("1110101") =>  1110101

例2:

代码语言:javascript
复制
(999999).toString(2) => "11110100001000111111"

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

示例2是如何工作的,我希望结果是11110100001000111111,但我收到了11110100001000112000.

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-08 19:00:14

首先,在JS中没有二进制数字格式,当您只编写1和0时,1110101仅为100万,11万,101,而不是117个二进制。

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

代码语言:javascript
复制
9007199254740991
11110100001000111111

很明显,十一个十分之一,一百一十个四万亿,一百一万亿,十亿,11.1万,一百一十一个都大于最大整数,所以你必然会有精度损失。

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

代码语言:javascript
复制
console.log(parseInt("11110100001000111111", 2))

票数 4
EN

Stack Overflow用户

发布于 2018-09-08 18:58:38

在javascript中有一种叫做max safe integer的东西,上面的整数计算就像你看到的那样很奇怪。

在这里阅读更多关于它的INTEGER

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52238348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档