2010-02-09 13 views
11

Jak uzyskać losowe wartości Double między 0.0 a 0.06 w Javie?Uzyskiwanie losowej liczby od 0 do 0,06 w Javie?

+2

To nie jest tak proste, jak się wydaje. +1 –

+2

Kiedy mówisz "między", czy chcesz, aby punkty końcowe były uwzględniane lub wykluczane jako możliwe wartości zwracane? – AakashM

+1

Powinieneś wyjaśnić, czy to, czego chcesz, to liczby w [0,0.06] lub [0,0.06]. Ten pierwszy, w którym przedział jest zamknięty (to jest punkty końcowe) nie jest tym samym, co drugi, gdzie nigdy nie można uzyskać wartości 0,06. – uckelman

Odpowiedz

22

nextDouble() zwraca losową liczbę zmiennoprzecinkową jednolicie rozdzielone między 0 i 1. po prostu przeskalować wynik następująco:

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

Zobacz this documentation więcej przykładów losowych.

+2

Może również zajść potrzeba sprawdzenia, że ​​liczba jest mniejsza niż <0,06, operacje zmiennoprzecinkowe nie są dokładne [w tym sensie, że zawsze występuje pewien błąd/niepewność, który kumuluje się w wielu operacjach zmiennoprzecinkowych]. – Fakrudeen

+0

Należy także wystrzegać się użycia nowej instancji 'Random' dla każdej liczby, której potrzebujesz. W tym sensie odpowiedź uckelmana poniżej jest lepsza, ponieważ pozwala uniknąć typowego błędu. – Joey

+0

@Fodrudeen, wow, rzeczywiście. liczba = Math.min (liczba, 0.06); – Justin

7

Random To daje losową podwoi się w przedziale [0,0.06):

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

podstawie this java doc (choć oglądać warunek brzegowy):

new Random().nextDouble() * 0.06 
3

Aby uniknąć niedokładność wartości zmiennoprzecinkowych można użyć podwójnego liczenia/całkowitą, która jest dokładniejsza (przynajmniej na x86/platform x64)

double d = Math.random() * 6/100; 
Powiązane problemy