js如何把一个八进制字符串识别为number型八进制数呢?而非转换成其它数字
eg. '777'转成0777,'420' 转成0420
js如何把一个八进制字符串识别为number型八进制数呢?而非转换成其它数字
eg. '777'转成0777,'420' 转成0420
这个问题不成立。因为不存在 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)
。
8 回答5.4k 阅读✓ 已解决
9 回答8.6k 阅读
6 回答4.3k 阅读✓ 已解决
5 回答3.3k 阅读✓ 已解决
6 回答2.9k 阅读
3 回答9.7k 阅读✓ 已解决
4 回答7.6k 阅读✓ 已解决
parseInt('777', 8)
第二个参数是 进制,8 就是八进制,10就是10进制
参考 MDN 文档 parseInt