您好我发现这段JS代码生成零或一:我不明白管道(ORing)是如何涉及的?
var randomNum = ((Math.random () * 2 | 0) + 1) - 1; // random number between 0 and 1
我找到了另一种方式
Math.floor(Math.random()*2)
实现了同样的目标。哪一个更受欢迎?
答案 0 :(得分:7)
"我不明白管道(ORing)是如何参与的?"
管道是按位OR运算符,在这里只是用来摆脱随机数的小数部分的简短方法。
因此随机数会生成从0
到1.9999999999
的内容,而删除小数则会为您提供0
或1
。
" 首选哪一个?"
我在一般代码中说明了首选项,因此Math.floor()
。
你也可以这样做:
var randomNum = Math.random() < 0.5 ? 0 : 1;
答案 1 :(得分:1)
您可以使用Math.round(Math.random())
,它会进行舍入并仅返回零和一。它是平均分配的。
var i = 1e7,
count = [0, 0];
while (i--) {
count[Math.round(Math.random())]++;
}
console.log(count);
&#13;