我需要帮助 Math.random():
我必须旋转一些图像(使用CSS3变换(度))
从-40
到+40
的方式获得结果
但跳过范围的结果: -20 和 +20
如果我没有错,这会在 -40 到 +40
的范围内随机获得结果 var counter = Math.round(Math.random()*81)-40;
如何从-20和+20之间的结果数字中排除???
答案 0 :(得分:13)
随机-1或1次0-20随机加20,可以工作
(Math.random()<.5?-1:1)*Math.floor(Math.random()*20 + 21);
1300次运行的样本结果(为简单起见仅显示正面):
Number_21: 70
Number_22: 62
Number_23: 56
Number_24: 57
Number_25: 79
Number_26: 57
Number_27: 64
Number_28: 60
Number_29: 57
Number_30: 67
Number_31: 63
Number_32: 81
Number_33: 81
Number_34: 65
Number_35: 59
Number_36: 59
Number_37: 62
Number_38: 71
Number_39: 52
Number_40: 78
答案 1 :(得分:10)
我会生成20到40之间的随机数,然后随机否定它。
var counter = (Math.round(Math.random() * 20) + 20) * (Math.random() < 0.5 ? 1 : -1);
答案 2 :(得分:9)
修改现有答案以给出均匀分布范围-40到-21和21到40:
(Math.random()<.5?-1:1)*(Math.floor(Math.random()*20) + 21)
答案 3 :(得分:7)
没有分支,只有单 random()
调用,使用模数运算符的魔力:
//Return a result between -40 and +40, excluding the range -20 to +20
var zeroToThirtyNine = Math.floor(Math.random()*40)
var counter = ((zeroToThirtyNine+61)%81)-40
zeroToThirtyNine | counter --------------------------- 0 | 21 1 | 22 2 | 23 ... 18 | 39 19 | 40 20 | -40 21 | -39 ... 37 | -23 38 | -22 39 | -21
答案 4 :(得分:6)
生成-20到+20之间的数字,如果是负数,则减去另外20度。如果是肯定的,加20度。
另外,你可能想要地板而不是圆形,所以你不会得到41度。
var counter = Math.floor(Math.random()*81)-40;
答案 5 :(得分:4)
您想要生成40个可能的数字(-40到-21,21到40-这些都是20个数字范围) - &gt;在[0,39]中生成随机均匀分布的数字(也包含40个数字)。这可以通过Math.floor(Math.random()* 40)
在Javascript中完成将输出范围映射到所需的范围。
例如:
var uniformFrom0To39 = Math.floor(Math.random()*40)
return uniformFrom0To39 <= 19 ? uniformFrom0To39 - 40 : uniformFrom0To39 + 1
您还可以使用数组[-40,-39,...,-21,21,22,...,40]执行映射 - 您还可以将该实现解释为“使用数组创建数组您想要的值,并随机选择一个“。
答案 6 :(得分:3)
您的代码在-40和+41之间提供随机数,因为Math.round()可以向上舍入。 以下代码应该给出您想要的内容:
if(Math.random()>0.5) {
counter = Math.round(Math.random()*19)-40 // from -40 to -21
} else {
counter = Math.round(Math.random()*19)+21 //from +21 to +40
}
答案 7 :(得分:0)
如果你有一个不太对称的排除区域,你可以像这样进行随机化:
do
{
random = Math.floor(Math.random()*81 - 40);
}
while ((randomNum < excludedMax) && (randomNum > excludedMin));
如果您想要排除,例如-19到4或其他奇数,这将很有用。它对你的情况也很有用。
答案 8 :(得分:-1)
写一个循环循环,直到你得到一个超出范围的数字。它很容易理解,并且很容易证明你获得的数字仍然是随机的。