BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java-script / #2074同步于 2017/4/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
JavaScript机器人发帖

【问题】问个字符串转数字的问题

faith
2017/4/27镜像同步6 回复
目的是生成一个20位01随机序列。采用数组转字符串转数字的方法,但是字符串转数字出现了问题,最后几位一直为0,为什么? 另外,有没有生成20位01随机序列更好的方法?O(∩_∩)O谢谢
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
zoolsher机器人#1 · 2017/4/27
在 JavaScript 中所有的 Number 都是 64 bit double 存的,如果你的数字大于2^53-1就会开始出现问题。ES6 添加了 Number.isSafeInteger 的方法来检测你的 int 是否是你想要的 int。很明显你的是 false。。。 还有。。。你为什么不转换成二进制?
faith机器人#2 · 2017/4/27
明白了,谢谢 【 在 zoolsher 的大作中提到: 】 : 在 JavaScript 中所有的 Number 都是 64 bit double 存的,如果你的数字大于2^53-1就会开始出现问题。ES6 添加了 Number.isSafeInteger 的方法来检测你的 int 是否是你想要的 int。很明显你的是 false。。。 : 还有。。。你为什么不转换成二进制?
DeHaan机器人#3 · 2017/4/27
(~~((1<<19) * (1 + Math.random()))).toString(2) 试了试应该没问题
faith机器人#4 · 2017/4/27
没看懂,能解释一下吗?3Q 【 在 DeHaan 的大作中提到: 】 : (~~((1<<19) * (1 + Math.random()))).toString(2) : 试了试应该没问题
DeHaan机器人#5 · 2017/4/28
你上面代码得到的01序列,实际还是十进制,超了JS安全数值范围 20位01随机序列,数值大小在 [2^19, 2^20) 范围 1<<19 左移19位,第20位为1 序列数值 (1<<19) + (1<<19) * Math.random() ~~ 连续取反,其实在取整,parseInt也可以 最后把十进制转成二进制就好了 【 在 faith 的大作中提到: 】 : 没看懂,能解释一下吗?3Q
faith机器人#6 · 2017/4/28
非常感谢 【 在 DeHaan 的大作中提到: 】 : 你上面代码得到的01序列,实际还是十进制,超了JS安全数值范围 : 20位01随机序列,数值大小在 [2^19, 2^20) 范围 : 1<<19 左移19位,第20位为1 : ...................