JavaScript随机数介于15和225之间,增量为30?

JavaScript随机数介于15和225之间,增量为30?,javascript,math,random,Javascript,Math,Random,嗨,我需要在JavaScript中生成一个15到225之间的随机数,只能以30为增量。例如:45、75、105等 关于如何做到这一点有什么想法吗?我知道Math.floor(Math.random()*11)例如随机数1-10,但是如何修改它以适应我正在尝试做的事情呢?像这样 Math.floor(Math.random()*8)*30 + 15 如何使用: [15, 45, 75, 105, 135, 165, 195, 225][Math.floor(Math.random()*8)]

嗨,我需要在JavaScript中生成一个15到225之间的随机数,只能以30为增量。例如:45、75、105等

关于如何做到这一点有什么想法吗?我知道
Math.floor(Math.random()*11)
例如随机数1-10,但是如何修改它以适应我正在尝试做的事情呢?

像这样

Math.floor(Math.random()*8)*30 + 15
如何使用:

[15, 45, 75, 105, 135, 165, 195, 225][Math.floor(Math.random()*8)]

这里有一个函数,它预先计算所有可能的数字,然后随机返回一个

function getRandomNumber(start, end, increments) {
    var numbers = [];
    for(var n = start; n <= end; n += increments) {
        numbers.push(n);
    }

    var randomIndex = Math.floor(Math.random() * numbers.length);
    return numbers[randomIndex];
}

从值表开始

x |   y
=======
0 |  15
1 |  45
2 |  75
3 | 105
4 | 135
5 | 165
6 | 195
7 | 225
建立方程

y = ax + b
y = 30x + 15
插入一些初始值

15 = a(0) + b
225 = a(7) + 15
可以求解任何变量

15 = b
插入不同的初始值

15 = a(0) + b
225 = a(7) + 15
求解任何剩余变量

210 = a(7)
30 = a
重述等式

y = ax + b
y = 30x + 15
在限制之间随机化
x

x = Math.floor(Math.random() * 8) //0-7
在功能上使用

function customRandomNumber() {
    var x;
    x = Math.floor(Math.random() * 8);
    return 30 * x + 15;
}
在一个区间内以步长获取一个随机数可以在以下函数中推广:

function rand(min, max, step) {
    var delta,
        range,
        rand;
    if (arguments.length < 2) {
        max = min;
        min = 0;
    }
    if (!step) {
        step = 1;
    }
    delta = max - min;
    range = delta / step;
    rand = Math.random();
    rand *= range;
    rand = Math.floor(rand);
    rand *= step;
    rand += min;
    return rand;
}


我还应该注意,因为我忘记了可能的边界问题,广义形式将不包括225的上界。这是因为
Math.random()
返回一个大于或等于零且小于一的数字(
0您需要考虑您想要的最终结果。15到225之间是您想要的目标,但不是您需要使用以获得结果的值

225/30=7.5.15是30的一半。因此,(225-15)/30=7。您需要一个介于1和7之间的随机数,然后将其乘以30并将15加到最终结果中

var myNumber = Math.floor(Math.random()*7);
myNumber = myNumber *30 + 15;

console.log(myNumber);

这是一个通用版本

function randomIntInSteps(a, b, step) {
  function randomInt(a, b) {
    return Math.floor(Math.random() * (b - a + 1) + a);
  }

  if (a > b) {
    // Ensure a is smaller.
    var c = a;
    a = b;
    b = c;
  }

  step = Math.abs(step)

  return a + randomInt(0, Math.floor((b - a)/step)) * step;
}
它可以这样使用:

randomIntInSteps(1, 20, 5); // possible results: 1, 6, 11, 16
randomIntInSteps(1, 21, 5); // possible results: 1, 6, 11, 16, 21
它也适用于负片:

randomIntInSteps(-10, 11, 5); // possible results: -10, -5, 0, 5, 10
randomIntInSteps(-20, -9, 5); // possible results: -20, -15, -10
由于浮点错误,使用浮点可能会有问题:

randomIntInSteps(1.1, 5.5, 2.2); // possible results: 1.1, 3.3000000000000003, 5.5
为了克服浮点问题,您可以在查找随机数之前将数字转换为整数,然后再转换回。方法如下(注意:这取决于上面的
randominInstaps
函数,因此您仍然需要该函数):

现在,您将获得所需的结果:

randomNumber(1.1, 5.5, 2.2); // possible results: 1.1, 3.3, 5.5

要得到这个答案,需要的是大多数学生从未想到会用到的高中代数。
y=mx+b
not
y=ax+b
:)@qwertymk,你使用的变量名实际上并不重要。我本来可以写
foo=fizz*bar+buzz
,它会得到同样的结果。向学生传授
y=mx+b
惯例的唯一原因是,为了便于参考,我们可以给变量取一个一致的名称。我的理解是,在一些国家,特别是美国,
y=mx+b
是标准的,而在其他国家,如欧盟,
y=ax+b
是标准配置。不管怎样,这都不重要。基于原则,我最喜欢这一个。我当时想的是
random.choice(范围(15225+1,30))
,这是其中的javascript。当你想随机选择非线性值时,这是一种很好的技术,比如随机挑选一枚硬币,我真的不介意没有得到公认的答案,但这个答案实际上是错的。你永远不会得到225,只是fyiIt应该是
var myNumber=Math.floor(Math.random()*8)
Math.floor(Math.random()*11)
将返回一个数字
[0-10]
,而
Math.floor(Math.random()*10)+1
将返回一个数字
[1-10]