`random`

is a function that generates a number greater than or equal to 0 and less than 1.

So if I pick some numbers that might be generated by `random`

:

```
0
0.25
0.5
0.88
```

(It’ll be more like 0.263578975432… rather than 0.2, but just as an example)

If you want integers, then there are functions for converting a floating point to the closest integer, one of which is `floor`

, which converts down to closest integer (as opposed to `ceil`

which converts up). Issue is that if you do that on the result of rand:

```
Math.floor(0) // 0
Math.floor(0.2) // 0
Math.floor(0.5) // 0
Math.floor(0.8) // 0
```

So you could multiply by 10 maybe:

```
Math.floor(0) // 0
Math.floor(2.5) // 2
Math.floor(5) // 5
Math.floor(8.8) // 8
```

Then you can get the numbers 0…9 (random doesn’t go up to 1)

But what you want is a number between min and max.

So say:

```
myMin = 10
myMax = 20
```

And then if you multiply by the difference between them (so 20 - 10, so 10), gives you same as above:

```
Math.floor(0 * 10) // 0
Math.floor(0.25 * 10) // 2
Math.floor(0.5 * 10) // 5
Math.floor(0.88 * 10) // 8
```

Which isn’t right, your `min`

is 10. So add the `min`

on after you `floor`

:

```
Math.floor(0 * 10) + 10 // 10
Math.floor(0.25 * 10) + 10 // 12
Math.floor(0.5 * 10) + 10 // 15
Math.floor(0.88 * 10) + 10 // 18
```

This is *almost* there. Issue is, the number can never reach `max`

. Soo, just add 1 to the difference that you multiply `random`

by:

```
Math.floor(0 * (10 + 1)) + 10 // 10
Math.floor(0.25 * (10 + 1)) + 10 // 12
Math.floor(0.5 * (10 + 1)) + 10 // 15
```

Those are the same, but then:

```
Math.floor(0.88 * (10 + 1)) + 10 // 19
```

Now, if `random`

was to generate a number greater than 0.9:

```
Math.floor(0.99 * (10 + 1)) + 10 // 20
```

It can reach 20