Ce face Random.nextDouble
nextDouble() returnează un Double aleatoriu cel puțin 0.0 și mai mic decât 1.0. Cu argumente, nextDouble(10.0, 20.0) dă un număr din intervalul [10, 20). Valorile sunt distribuite uniform: orice parte a intervalului are aceleași șanse.
nextLong() funcționează ca nextInt(), dar pentru numere Long, utile pentru valori mari (de exemplu identificatori sau milisecunde). Ca și la nextInt, limita de sus este exclusă.
O probabilitate se simulează des cu nextDouble() < p: condiția este adevărată în aproximativ p din cazuri.
Parametri
| Parametru | Descriere |
|---|---|
from |
Limita de jos, inclusă (implicit 0). |
until |
Limita de sus, exclusă (implicit 1.0 pentru nextDouble). |
Ce returnează
Un Double, respectiv un Long.
Exemple
Exemplul 1: Temperaturi aleatorii
Generăm 5 temperaturi între 15 și 25 de grade și le rotunjim la o zecimală.
import java.util.Locale
import kotlin.random.Random
fun main() {
val r = Random(42)
repeat(5) { zi ->
val t = r.nextDouble(15.0, 25.0)
println("Ziua ${zi + 1}: ${"%.1f".format(Locale.ROOT, t)} °C")
}
}
Rezultat
Ziua 1: 17.3 °C
Ziua 2: 24.0 °C
Ziua 3: 17.7 °C
Ziua 4: 24.7 °C
Ziua 5: 16.8 °C
Exemplul 2: Simularea unei probabilități
Un produs este defect cu probabilitatea 5%. Din 10 000 de produse, aproximativ 500 ar trebui să fie defecte.
import kotlin.random.Random
fun main() {
val r = Random(3)
val defecte = (1..10_000).count { r.nextDouble() < 0.05 }
println("Produse defecte: $defecte din 10000")
}
Rezultat
Produse defecte: 509 din 10000
Exemplul 3: Numere mari cu nextLong
Generăm numere de comandă de 10 cifre, care nu încap într-un Int.
import kotlin.random.Random
fun main() {
val r = Random(42)
repeat(3) {
println("Comanda nr. ${r.nextLong(1_000_000_000L, 10_000_000_000L)}")
}
}
Rezultat
Comanda nr. 7688767008
Comanda nr. 3241022190
Comanda nr. 8473977616
Greșeli frecvente
- Scrii
nextDouble(1.0)așteptând un număr între 1 și ceva. Un singur argument este limita de sus: rezultatul este între 0 și 1. - Afișezi direct un
Doublealeatoriu și primești 16 zecimale. Formatează cu"%.2f".
Comenzi înrudite
Random.nextInt: Generează numere întregi aleatorii; Random(seed) dă mereu aceeași secvență, Random.nextInt() una diferită la fiecare rulare.String.format: Construiește un text după un șablon cu marcaje ca %d, %s, %.2f, de exemplu pentru numere cu două zecimale.round: Rotunjesc un număr zecimal: round la cel mai apropiat întreg, floor în jos, ceil în sus, truncate taie zecimalele.