2010-02-09 6 views
11

Comment obtenez-vous des valeurs Double aléatoires entre 0,0 et 0,06 dans Java?Obtenir un nombre aléatoire entre 0 et 0,06 en Java?

+2

Ce n'est pas aussi facile que ça en a l'air. +1 –

+2

Lorsque vous indiquez 'entre', voulez-vous inclure ou exclure les points de terminaison comme valeurs de retour possibles? – AakashM

+1

Vous devriez préciser si ce que vous voulez est des nombres dans [0,0.06] ou [0,0.06]. Le premier, où l'intervalle est fermé (c'est-à-dire, les points d'extrémité sont inclus) n'est pas le même que le dernier, où vous ne pouvez jamais obtenir 0,06 comme valeur. – uckelman

Répondre

22

nextDouble() renvoie un nombre à virgule flottante aléatoire uniforme répartis entre 0 et 1. échelle simplement le résultat comme suit:

Random generator = new Random(); 
double number = generator.nextDouble() * .06; 

Voir this documentation pour plus d'exemples au hasard.

+2

Aussi, vous devrez peut-être vérifier que le nombre est inférieur à <0,06, les opérations en virgule flottante ne sont pas exactes [dans le sens où il y a toujours une erreur/incertitude qui s'accumule sur de nombreuses opérations en virgule flottante]. – Fakrudeen

+0

Méfiez-vous également d'utiliser une nouvelle instance de 'Random' pour chaque numéro dont vous avez besoin. En ce sens, la réponse d'uckelman ci-dessous est meilleure car elle évite spécifiquement cette erreur commune. – Joey

+0

@Fakrudeen, wow, en effet. nombre = Math.min (nombre, 0,06); – Justin

7

Cela vous donnera un double aléatoire dans l'intervalle [0,0.06):

double r = Math.random()*0.06; 
1

Basé sur this java doc (montre bien que la condition limite):

new Random().nextDouble() * 0.06 
3

Pour éviter l'inexactitude des valeurs à virgule flottante, vous pouvez utiliser un double calcul/entier qui est plus précis (au moins sur x86/plates-formes x64

double d = Math.random() * 6/100; 
Questions connexes