Détails
Générer des nombres entiers aléatoires en JavaScript dans une plage spécifique ?
Comment puis-je générer des nombres entiers aléatoires entre deux variables spécifiées en JavaScript, par exemple, x = 4
et y = 8
produiraient n'importe lequel de 4, 5, 6, 7, 8
?
1823
3
Vous trouverez quelques exemples sur la page [Mozilla Developer Network][1] :
Voici la logique derrière tout ça. C'est une simple règle de trois :
Math.random()
renvoie unNombre
entre 0 (inclusif) et 1 (exclusif). Nous avons donc un intervalle comme celui-ci :Maintenant, nous voudrions un nombre entre
min
(inclusif) etmax
(exclusif) :Nous pouvons utiliser
Math.random
pour obtenir le correspondant dans l'intervalle [min, max]. Mais, d'abord, nous devons factoriser un peu le problème en soustrayantmin
du deuxième intervalle :Cela donne :
Nous pouvons maintenant appliquer
Math.random
et ensuite calculer le correspondant. Choisissons un nombre aléatoire :Donc, pour trouver
x
, nous devrions faire :N'oubliez pas d'ajouter
min
, afin d'obtenir un nombre dans l'intervalle [min, max] :C'était la première fonction de MDN. La seconde renvoie un nombre entier compris entre
min
etmax
, tous deux inclus.Maintenant, pour obtenir des entiers, vous pouvez utiliser
round
,ceil
oufloor
.Vous pourriez utiliser
Math.round(Math.random() * (max - min)) + min
, mais cela donne une distribution non uniforme. Les deux,min
etmax
n'ont qu'environ la moitié des chances d'obtenir un résultat :Si
max
est exclu de l'intervalle, il a encore moins de chances d'obtenir un résultat quemin
.Avec
Math.floor(Math.random() * (max - min +1)) + min
vous avez une distribution parfaitement égale.Vous ne pouvez pas utiliser
ceil()
et-1
dans cette équation parce quemax
a maintenant un peu moins de chance d'être lancé, mais vous pouvez aussi lancer le résultat (non désiré)min-1
.[1] : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random
usage :
Pour tester cette fonction, et ses variantes, enregistrez le HTML/JavaScript ci-dessous dans un fichier et ouvrez-le avec un navigateur. Le code produira un graphique montrant la distribution d'un million d'appels de fonction. Le code enregistrera également les cas limites, de sorte que si la fonction produit une valeur supérieure à la valeur maximale ou inférieure à la valeur minimale, vous le saurez.