js如何把一个八进制字符串识别为number型八进制数呢?而非转换成其它数字

js如何把一个八进制字符串识别为number型八进制数呢?而非转换成其它数字
eg. '777'转成0777,'420' 转成0420

阅读 3.5k
5 个回答

parseInt('777', 8)
第二个参数是 进制,8 就是八进制,10就是10进制

参考 MDN 文档 parseInt

radix 可选
从 2 到 36,表示字符串的基数。例如指定 16 表示被解析值是十六进制数。
请注意,10不是默认值!

parseInt('777', 8) 表示的是一个10进制的511,也就是八进制的0777,但是0777只能以字符串或自定义对象类型显示。

这个问题不成立。因为不存在 number型八进制数

其实吧这个问题和 js 保留两位小数 有异曲同工之妙(笑)

因为提问者显然没有认清 number 类型储存的方式。它并不是像你在纸上写一个数一样,可以有末尾零,可以有进制前缀。

任何字面量或非字面量的数字本质上是二进制储存的,我想这没有问题。但你控制台打印出来,或是和字符串拼接的时候,它就是“十进制”,我认为前者是正常设计,而后者是 Number#toString 方法导致的。

那么,如果你要保存 0777,或是 77.00 这类“数字”,还是要回到“纸上”的方式,也就是字符串。或者你也可以封装一个新的 MyNumber 类,附带进制信息,这样你想怎么存就怎么存,想怎么读就怎么读。反正我觉得意义不大。

看你是期望获得0777或者0420这样的字符串,所以最简单的方式就是直接在前面添加字符0
需要注意,如果是整数字,其实在计算机中都只有一种存储方式,就是二进制存储,而打印输出或者输入交互时的不同进制仅仅是 在 交互环境中使用,即八进制显示为0777,在内存中肯定也是存储为0000 0001 1111 1111类似数据。

所以其实真正需要存储时为a=parseInt('777', 8)这样处理的数据,显示时可以以a.toString(8)来输出对应8进制的数据,至于需要在前面加个0前导,可以用字符串拼接计算来处理,例如'0'+a.toString(8)

推荐问题
宣传栏