parseInt 进制转换

parseInt 进制转换问题

今天在工作中遇到一个比较有意思的进制转换问题,在此做下记录,希望能帮助在利用parseInt做进制转换时遇到类似坑的同学。

首先我们看下 w3c 手册中对于parseInt的使用说明:

大概的意思是parseInt 共接收两个参数,其中第一个是一个字符串,第二个参数是进制基数,返回的结果是一个十进制数字。此时我们在浏览器中输入parseInt(072,8);系统返回的结果是5,你一定感到很诧异。下面我们来说明下这个结果到底是怎么解析的。

首先,我们在使用parseInt方法的时候,第一个参数的类型应该是字符串类型,也就是说如果我的写法是parseInt(“072”,8); 此时系统会给我返回正确的结果,即 58

问题到这里并没有结束,我没有按照规定语法使用,系统并没有报错,并给我返回了结果5,我们一起来研究下为什么偏偏是5呢?

原来,在javascript 中 当我们给一个数字加了前缀0,此时该数字串会被默认以8进制进行解析,这样的话,我们输入的072首先就被转义成了 58 也就是说,我明明写的parseInt(072,8) 实际解析的时候是 parseInt(58,8); 可是问题又来了,问什么会得到5这个一个个位数呢?

在仔细观察parseInt(58,8) 这个运算式子之后我们发现了端倪,58的末尾数字竟然是8,这是不符合规范的啊,一个表示8进制的数字串最后位数的值明明应该是小于8的才对,也就是说,我们这个数有错误了,不符合规范。这样的话,系统便会自动只截取第一个数字进行进制转换,也就是说,我们的式子最后变成了parseInt(5,8); 得出了结果5. 为了验证这个逻辑我们又试了,parseInt(12,2); 结果不出所料,返回的值为1 。至此,真相大白。


  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值