par kirupa avec le code par Scott Ruttencutter / filed under JavaScript 101
Apprenez à générer une plage de nombres aléatoires qui tombent non seulement dans une plage supérieure et inférieure que vous spécifiez, mais la fréquence à laquelle chaque nombre apparaît est juste et équilibrée! ️ ️
Pour de nombreuses situations allant des opérations de lancer de pièces aux animations procédurales, vous voudrez travailler avec des nombres dont les valeurs sont un bitunpredictable., Vous voulez travailler avec des nombres aléatoires. Générer un nombre aléatoire est facile. Il est intégré à JavaScript et exposé via l’infâme Math.random() fonction. Maintenant, si cette fonction existe déjà, Que faisons-nous encore ici? Eh bien, l’utilisation de la fonction n’est qu’une partie de la possibilité de générer un nombre aléatoire. Pour la plupart des situations réelles, nous ne voulons pas n’importe quel nombre aléatoire. Nous voulons un type spécifique de nombre aléatoire – un qui se situe dans une plage que nous définissons. Il y a quelques gotchas subtils avec cela, et c’est ce que le reste de ces sections explorera.
à Partir de!,
Montrez-moi simplement le Code
avant de plonger dans les détails, si tout ce que vous voulez est le code pour générer un nombre entier aléatoire dans une plage définie, utilisez les mathématiques.random () avec la formule suivante:
Math.floor(Math.random() * (1 + High - Low)) + Low
La valeur de High est le plus grand nombre aléatoire que vous souhaitez générer. La valeur de low est le plus petit nombre aléatoire que vous souhaitez générer à la place. Lorsque vous exécutez ce code, vous obtiendrez un nombre qui se situe au hasard quelque part entre les limites spécifiées par High et Low.,
Voici quelques exemples:
pour simplifier les choses, voici une fonction que vous pouvez utiliser à la place:
function getRandomNumber(low, high) { let r = Math.floor(Math.random() * (high - low + 1)) + low; return r;}
appelez simplement getRandomNumber et passez les limites inférieure et supérieure comme arguments:
C’est tout ce qu’il y a à générer un nombre aléatoire qui se situe dans une plage
L’ajout de 1 expliqué
en JavaScript, Math.,random() renvoie un nombre greaterthan ou égal à 0 mais inférieur à 1:
une Autre façon de statingthat est (0 <= n < 1) où n est le numéro de arelooking pour. Cette incapacité pour les mathématiques.aléatoire pour obtenir vraiment très proche de 1 mais jamais tout à fait y arriver est en grande partie pourquoi obtenir un numberbetween aléatoire une gamme de nombres est si…inelegant:
Math.floor(Math.random() * (1 + High - Low)) + Low
En regardant notre approche un peu plus loin, commençons par la plus grande bizarrerie, l’ajout du 1. Ici, c’est pourquoi nous avons décidé d’inclure., Nous avons déjà déclaré à plusieurs reprises que les mathématiques.la fonction random () ne retournera jamais un 1 comme valeur. Il retournera quelque chose de proche comme.9999999, mais ce ne sera jamais un 1. Nous voulons également un nombre rond qui n’inclut pas les décimales. Il existe plusieurs approches pour arrondir un nombre, mais nous arrondissons leoutput par les mathématiques.étage où nous arrondissons au plus procheinteger. Cet arrondi est le problème.
Si nous n’avons pas ajouté le 1, à cause de la façon dont les mathématiques.fonctionne au sol, il n’obtiendra jamais la réponse maximale possible lorsque nous multiplions le résultat de Haut-Bas par les mathématiques.aléatoire()., Cela n’a probablement pas beaucoup de sens, alors regardons un exemple où tenter d’obtenir un nombre aléatoire sans ajouter le 1.
Ce que nous voulons faire est de générer un nombre aléatoire entre 10 et 50. Ignorant le 1, Voici à quoi ressemblera l’expression:
Math.floor(Math.random() * 40) + 10
Le calcul.random () * 40 ne retournera jamais un 40 car cela nécessiterait des mathématiques.random () pour retourner un 1…soyons optimistes et disons que les maths.random() renvoie un .9999, et nous multiplions cette valeur par 40. La valeur renvoyée sera 39.996. Devinez ce que sont les Mathématiques.étage du 39.,996 va être? Il va être 39! Lorsque ce 39 est ajouté à 10, vous obtenez avalue de 49. Vous n’avez aucun moyen concevable d’obtenir une réponse de 50 qui est le nombre élevé dans votre gamme de valeurs. La seule solution est d’ajouter un 1 à l’opération:
Math.floor(Math.random() * 41) + 10
Une fois que vous avez fait cela, vous serez en mesure de générer tous les nombres dans therange de vos nombres haut et bas, 10 et 50 respectivement, avec une fréquence égale.
Conclusion
générer correctement des nombres aléatoires est un problème difficile., Cela semble vraiment simple, mais obtenir la plage de nombres non seulement correcte, mais se produisant également avec une fréquence égale est l’endroit où les défis se produisent. Tant que vous êtes conscient des limites des différentes méthodes d’arrondi, vous pouvez remplacer les Mathématiques.étage avec mathématiques.ceil ou, si vous êtes vraiment audacieux, les Maths.rond.
vous avez une question ou vous souhaitez simplement discuter? Commentez ci-dessous ou passez par nos forums (ils sont en fait la même chose!) où un groupe de personnes les plus sympathiques que vous rencontrerez sera heureux de vous aider!,
lorsque Kirupa n’est pas occupé à écrire sur lui-même à la 3ème personne, il pratique la distanciation sociale even même sur ses profils Twitter, Facebook et LinkedIn.
Cliquez sur Abonnez-vous pour obtenir des conseils, des astuces, des selfies et plus encore personnellement livrés dans votre boîte de réception.