在Ruby / Rails或Faker中生成一个随机小数

问题描述 投票:0回答:2

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是所生成的随机数

如果我不能使用faker,在Ruby中有没有一种方法可以生成这个?我只需要生成一个0到1之间有2个小数位的数字

ruby-on-rails ruby faker
2个回答
1
投票

尝试:

rand.round(2)

rand生成一个随机数,round将其舍入为所需的小数位数。这可能会产生一个小于两个十进制数字的数字(例如0.5)。如果要强制执行此操作,则可以将随机数格式化为字符串:

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

其中%f的格式为float%.2f专用于两位十进制数字。实际上,您可以忽略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
投票

您可以尝试以下操作:

Faker::Number.between(from: 0.0, to: 1.0).round(2)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.