Math.random()帮助获得'+ N'和'-N'randoms(不包括特定范围)

Rok*_*jan 18 javascript random math jquery

我需要Math.random()的一些帮助:
我必须旋转一些图像(使用CSS3 transform(deg))
以获得结果-40,+40
但跳过范围:-20+20的结果

数学随机定义+  - 半径

如果我没有错,这将在-40+40的范围内得到随机结果

  var counter = Math.round(Math.random()*81)-40;
Run Code Online (Sandbox Code Playgroud)

如何排除-20和+20之间的结果数字???

Joe*_*Joe 13

随机-1或1次0-20随机加20,可以工作

(Math.random()<.5?-1:1)*Math.floor(Math.random()*20 + 21);
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)


Ale*_*pin 10

生成20到40之间的随机数,然后随机否定它.

var counter = (Math.round(Math.random() * 20) + 20) * (Math.random() < 0.5 ? 1 : -1);
Run Code Online (Sandbox Code Playgroud)


use*_*861 9

修改现有答案以给出均匀分布范围-40到-21和21到40:

(Math.random()<.5?-1:1)*(Math.floor(Math.random()*20) + 21)
Run Code Online (Sandbox Code Playgroud)


Blu*_*eft 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
Run Code Online (Sandbox Code Playgroud)
zeroToThirtyNine | counter
---------------------------
               0 | 21
               1 | 22
               2 | 23
                ...
              18 | 39
              19 | 40
              20 | -40
              21 | -39
                ...
              37 | -23
              38 | -22
              39 | -21


Den*_*nis 6

生成-20到+20之间的数字,如果是负数,则减去另外20度.如果是积极的,加20度.

此外,你可能想要地板而不是圆形,所以你不会得到41度.

var counter = Math.floor(Math.random()*81)-40;
Run Code Online (Sandbox Code Playgroud)