Hace algunas semanas tuve el mismo obstáculo por el que entraste a este blog, en primer lugar me puse a pensar en el famoso Math.random
, y probablemente tú también y pues fue un buen paso para comenzar, a continuación te presentaré la solución directa y luego su explicación.
javascriptfunction intervalNum(min, max) {return Math.floor(Math.random() * (max - min + 1) + min)}console.log(intervalNum(10, 20)) //output: 17
¿Qué acaba de suceder en el código anterior?, pues acá te lo explicaré.
Comenzaremos por explicar brevemente a Math.floor()
y Math.random()
.
Math.random
: retorna un decimal desde el 0 (Incluido) hasta el 1 pero sin incluirlo.Math.floor
: recibe un decimal y devuelve la parte entera del decimal.Teniendo eso en cuenta, vamos a refactorizar el código para que se pueda entender mejor.
javascriptfunction intervalNum(min, max) {const posibilidades = max - min + 1let random = Math.random() * posibilidadesrandom = Math.floor(random)return min + random}
Ahora se ve agradable, ¿Verdad?, pues ahora vamos paso a paso.
javascriptconst posibilidades = max - min + 1
Necesitamos un número de posibilidades, pero si restamos el max
y min
tendremos una posibilidad menos, es decir, si necesito un número aleatorio entre 3 y 6, la resta es 3, pero las posibilidades reales son 4 (3, 4, 5, 6
) y así para todo caso, es por eso el + 1
en el número de posibilidades.
javascriptlet random = Math.random() * posibilidades
Ahora con el decimal generado por Math.random()
, podemos multiplicarlo por el número de posibilidades, tomando el ejemplo anterior de 3 y 6, las posibildades serian 4, si lo muliplicamos por decimal generado, entonces el resultado de esta multiplicación sería menor que 4 y mayor que 0, entonces te estarás preguntando "y para qué quiero un decimal aleatorio entre 0 a 4", pues ahora vamos a las siguientes líneas de código.
javascriptrandom = Math.floor(random)return min + random
Ya que tenemos un decimal aleatorio de 0 a 4, agarramos la parte entera con Math.floor()
, tendríamos un número aleatorio entre 0 y el 4 (excluido, ya que Math.random()
nunca retornará 1) y solo faltaría sumarle el intervalo menor(min
) y la suma de estos nunca será mayor que el max
ni menor que el min
(ya que lo sumamos).
Un ejemplo con 3 y 6 (puedes cambiar el valor generado por Math.random
y siempre funcionará):
javascriptfunction intervalNum(min, max) {const posibilidades = max - min + 1 // posibilidades = 6 - 3 + 1 = 4let random = Math.random() * posibilidades // random = 0.7 * 4 = 2.8random = Math.floor(random) // random = 2return min + random // output: 3 + 2 = 5}
Con esta explicación quiero que tu creatividad crezca y que sepas que todo es posible para los programadores.
Gracias por leer.