Random.nextDouble în Kotlin

nextDouble dă un număr zecimal aleatoriu (implicit între 0 și 1), nextLong un întreg Long aleatoriu.

Sintaxă
fun Random.nextDouble(): Double
fun Random.nextDouble(until: Double): Double
fun Random.nextDouble(from: Double, until: Double): Double
fun Random.nextLong(from: Long, until: Long): Long

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 Double aleatoriu ș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.