Генерация случайного десятичного числа в пределах диапазона в Ruby / Rails или Faker - PullRequest
1 голос
/ 22 февраля 2020

Есть ли способ на Faker генерировать случайный десятичный разделитель между 0-1? https://github.com/faker-ruby/faker/issues/1834

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

Выше не работает. Ошибка:

 undefined method `within' for "12.4" String  

12.4 - случайное число, которое генерируется

Если я не могу использовать фейкер, есть ли способ в Ruby, чтобы сгенерировать это? Мне просто нужно сгенерировать число с двумя десятичными разрядами от 0 до 1

Ответы [ 2 ]

1 голос
/ 22 февраля 2020

Попробуйте:

rand.round(2)

rand генерирует случайное число, round округляет его до нужного числа десятичных знаков. Это может генерировать число, которое имеет МЕНЬШЕ, чем две десятичные цифры (например, 0.5). Если вы хотите применить это, вы можете отформатировать случайное число в строку:

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

, где %f - форматирование, так как float и %.2f задает c для две десятичные цифры. Вы можете фактически пропустить Kernel и просто позвонить format или использовать % примерно так:

"%.2f" % rand

(я предпочитаю Kernel.format, мне кажется более читабельным)

Сейчас это создает еще одну проблему:

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

, поскольку оно округляется при форматировании числа, которое внезапно не становится меньше 1. Если между вы подразумевали НЕ ВКЛЮЧИТЬ 1, вам нужно еще немного подправить:

Kernel.format(pattern, 0.floor(2)) # => "0.00"
Kernel.format(pattern, 0.9999999.floor(2)) # => "0.99"
0 голосов
/ 22 февраля 2020

Вы можете попробовать следующее:

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