Random.nextDouble în Dart

nextDouble dă un număr real între 0.0 (inclusiv) și 1.0 (exclusiv); nextBool dă true sau false.

Sintaxă
double nextDouble()
bool nextBool()

Ce face Random.nextDouble

nextDouble() returnează un double aleator în intervalul [0.0, 1.0). Înmulțit și deplasat, îl transformi în orice interval: a + r.nextDouble() * (b - a).

nextBool() returnează true sau false cu probabilitate egală, ca o aruncare de monedă. Pentru o probabilitate oarecare p folosește r.nextDouble() < p.

Ce returnează

nextDouble: un double din [0, 1); nextBool: un bool.

Exemple

Exemplul 1: Monedă și numere reale

import 'dart:math';

void main() {
  final r = Random(42);
  print(r.nextDouble());
  print(r.nextDouble().toStringAsFixed(3));
  final monede = [for (var i = 0; i < 6; i++) r.nextBool() ? 'cap' : 'pajură'];
  print(monede);
}

Rezultat

0.15092545597797424
0.604
[pajură, cap, pajură, pajură, cap, cap]

Exemplul 2: Prețuri simulate între 10 și 20 de lei

import 'dart:math';

void main() {
  final r = Random(3);
  for (final produs in ['pâine', 'lapte', 'brânză']) {
    final pret = 10 + r.nextDouble() * 10;
    print('$produs: ${pret.toStringAsFixed(2)} lei');
  }
}

Rezultat

pâine: 13.63 lei
lapte: 10.60 lei
brânză: 10.69 lei

Exemplul 3: Probabilitate de 30%

Într-un șir lung de încercări, cam 30% din ele reușesc. Cu seed fix, numărul exact este mereu același.

import 'dart:math';

void main() {
  final r = Random(11);
  var ploua = 0;
  for (var zi = 0; zi < 1000; zi++) {
    if (r.nextDouble() < 0.3) ploua++;
  }
  print('Zile cu ploaie din 1000: $ploua');
}

Rezultat

Zile cu ploaie din 1000: 301

Greșeli frecvente

  • Te aștepți ca nextDouble() să poată returna 1.0. Limita de sus este exclusivă.
  • Faci (r.nextDouble() * 10).toInt() și apoi folosești rezultatul fără să știi că este 0…9. Pentru întregi, nextInt e mai clar.

Comenzi înrudite

  • Random: Generatorul de numere aleatorii; nextInt(max) dă un întreg între 0 și max – 1. Cu seed, șirul se repetă.
  • Random.secure: Un generator aleator sigur criptografic, potrivit pentru parole, coduri și token-uri; nu acceptă seed.