Generați o zecimală aleatorie într-un interval în Ruby/Rails sau Faker (Programare, Ruby Pe Șine, Ruby, Faker)

pierdut9123193 a intrebat.
a intrebat.

Există o modalitate pe Faker pentru a genera o zecimală aleatorie între 0-1?https://github.com/faker-ruby/faker/issues/1834

Faker::Number.decimal(l_digits= 2, r_digits= 2).within(range: 0..1) 

Cele de mai sus nu funcționează. Eroare:

 undefined method `within' for "12.4" String  

12.4 fiind numărul aleator generat

Dacă nu pot folosi Faker, există o modalitate în Ruby de a genera acest lucru? Am nevoie doar să generez un număr cu 2 zecimale între 0 și 1

Comentarii

  • Ce vrei să spui prin „nu funcționează”? Rezultatul așteptat, rezultatul real? –  > Por Pascal.
  • @Pascal a actualizat întrebarea –  > Por pierdut9123193.
  • Se pare că decimal returnează un String și încerci să apelezi la within metoda pe ea. De unde provine această metodă? –  > Por Pascal.
  • @Pascal the within method este din biblioteca Faker –  > Por pierdut9123193.
2 răspunsuri
Pascal

Încearcă:

rand.round(2)

rand generează un număr aleatoriu, round îl rotunjește la numărul dorit de zecimale. Acest lucru ar putea genera un număr care are mai PUȚIN de două cifre zecimale (de ex. 0.5).Dacă doriți să impuneți acest lucru, puteți formata numărul aleatoriu într-un String:

Kernel.format("%.2f", rand)

Unde %f este formatarea ca float și %.2f este specific pentru două cifre zecimale.De fapt, puteți omite Kernel și să apelați pur și simplu format sau să utilizați % în felul următor:

"%.2f" % rand

(eu prefer Kernel.format, , mi se pare mai ușor de citit)

Acum, acest lucru ridică o altă problemă:

pattern = "%.2f"
Kernel.format(pattern, 0) # => "0.00"
Kernel.format(pattern, 0.9999999) # => "1.00"

pentru că se rotunjește la formatare, numărul nu este brusc mai mic decât 1. Dacă prin „între” ați vrut să spuneți „NU INCLUDE 1”, va trebui să mai modificați ceva:

Kernel.format(pattern, 0.floor(2)) # => "0.00"
Kernel.format(pattern, 0.9999999.floor(2)) # => "0.99"

Marian13

Puteți încerca următoarele:

Faker::Number.between(from: 0.0, to: 1.0).round(2)