Java de nombre aléatoire entre 0 et 0,06
En Java, j'ai besoin de générer aléatoirement un nombre entre 0
et 0.06
.
J'ai vu sur une autre question sur ici que le code suivant devrait faire l'affaire:
Random generator = new Random();
double number = generator.nextDouble() * .06;
Cependant, en faisant cela me donne vraiment le long des chiffres comme 0.007044013589130205
et 0.03656588431980957
, je ne pense pas qu'est ce que mon professeur est à la recherche d'.
Est-il de toute façon à générer des nombres aléatoires entre 0 et 0,06 qui ne disposent que de deux ou trois chiffres après la virgule?
Faire simple. Vous pouvez générer un nombre entier aléatoire entre 0 à 6 et de le diviser par 100. (n'oubliez pas de l'analyser à double avant de division)
est de 0,010,la précision est de 0,01,mais l'auteur a besoin d'une grande précision à 0,001,de sorte qu'il devrait générer entier aléatoire compris entre 0 à 60 et de le diviser à 1000,0.
Math.round
: stackoverflow.com/questions/153724/...est de 0,010,la précision est de 0,01,mais l'auteur a besoin d'une grande précision à 0,001,de sorte qu'il devrait générer entier aléatoire compris entre 0 à 60 et de le diviser à 1000,0.
OriginalL'auteur Brittany Gefroh | 2013-04-11
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire de cette façon, si vous voulez vous en nombre comprise entre [0;de 0,06] 0,01 différence:
Vous pouvez généraliser la formule
number = generator.nextInt(max + 1 -min) + min;
où max sera le plus grand nombre que vous ce que vous devez générer et min le plus bas. Cela va générer nombre de[min to max+1]
Pour augmenter le nombre de décimales que vous avez juste à diviser le nombre de 1000, 10000, et ainsi de suite.
* 1.0
dans le numérateur;number / 100.0
fera l'amende juste.merci pour la suggestion, je suis allé modifier
Aussi, je ne pense pas que
number
va être un nombre entier aléatoire entre 0 et 6. Vous voulez probablementint number = rn.nextInt(6);
merci encore sr. Je pense à mon personnage reste 😉
En fait, vous avez besoin
rn.nextInt(7)
pour obtenir un nombre entier compris entre 0 et 6 (inclus).OriginalL'auteur dreamcrash
En interne, Java
double
les valeurs sont une binaire à virgule flottante représentation. Ils n'ont pas de décimales. Vous pouvez format un double comme base-10 numéro de chaîne ayant un nombre de décimales spécifié. Par exemple, pour obtenir trois décimales (précision 0.001), vous pouvez utiliser:Si vous n'avez pas besoin de faire des calculs avec le nombre et que vous souhaitez disposer de deux ou trois chiffres après la virgule, il suffit d'imprimer
0.0
puis deux chiffres de l'entier aléatoire compris entre 00 et 60 ans (inclusivement).Oups! Vous avez raison. Il est trop tard dans la soirée pour moi de faire cela.
OriginalL'auteur Ted Hopp
Je suppose que vous avez besoin de précision pour être 0.001, essayez donc ceci:
cela va générer [0,0.060] moyennement avec la différence de plusieurs de 0,001,que peut-être vous voulez
int ret = r.nextInt(60) + 1
?Non,Aléatoire.nextInt(n) plage de [0,n),dans le but de générer un nombre entier dans l'intervalle [0,n],devraient utiliser nextInt(n+1)
Exactement. Vous êtes la génération aléatoire int entre 0 (inclus!) et à 60 ans (inclusivement). Donc, l'extrémité inférieure de la valeur de retour de la gamme sera 0.000, pas de 0,001. Vous avez besoin
ret
un aléatoire int dans l'intervalle [1, 60] pour produire la gamme que vous déclarez.avec cette solution n'est pas arrive que l'Op ne peut pas générer un nombre comme de 0,1?
l'auteur n'est besoin de 0 à 0,06 avec une précision de 0,001
OriginalL'auteur BlackJoker
Puisque vous faites affaire avec de la taxe de vente, vous devez être conscient de Pourquoi ne pas utiliser le Double ou Float pour représenter la monnaie? et À l'aide de BigDecimal de travailler avec des monnaies
À la génération aléatoire
BigDecimal
avec contraintes sur l'amplitude et le nombre de chiffres significatifs, voir Comment puis-je créer un hasard BigDecimal en Java?Également intéressant de souligner que BigDecimal peut être 100 fois plus lent que le double à faire exactement la même chose. Il est aussi plus long à écrire et plus difficile à lire en le rendant plus sujettes à erreur, en supposant que vous savez comment faire pour arrondir doubles. 😉
Ouais, quelques architectures n'ont pas un dédié FPU, mais pas mal d'architectures n'ont toujours pas de support matériel pour la virgule, donc ne pas l'utiliser à des fins scientifiques, statistiques ou géométrique de calcul.
Une moyenne d'un téléphone android a FPU soutien. Je ne voudrais pas utiliser le matériel sans FPU scientifique, statistique ou géométrique de calcul. Quel type d'appareils n'ont pas de FPU ces jours-ci, mais qui sont utilisées pour le calcul?
OriginalL'auteur Mike Samuel