首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Ruby/Rails或Faker中的范围内生成随机十进制

在Ruby/Rails或Faker中的范围内生成随机十进制
EN

Stack Overflow用户
提问于 2020-02-21 22:47:34
回答 2查看 3.7K关注 0票数 5

Faker有没有办法在0-1之间生成随机小数点?https://github.com/faker-ruby/faker/issues/1834

代码语言:javascript
运行
复制
Faker::Number.decimal(l_digits= 2, r_digits= 2).within(range: 0..1) 

以上内容不起作用。错误:

代码语言:javascript
运行
复制
 undefined method `within' for "12.4" String  

12.4是生成的随机数

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

EN

回答 2

Stack Overflow用户

发布于 2020-02-22 20:27:47

您可以尝试以下方法:

代码语言:javascript
运行
复制
Faker::Number.between(from: 0.0, to: 1.0).round(2)

资料来源:

票数 5
EN

Stack Overflow用户

发布于 2020-02-21 23:00:01

尝试:

代码语言:javascript
运行
复制
rand.round(2)

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

代码语言:javascript
运行
复制
Kernel.format("%.2f", rand)

其中,%f是作为浮点数的格式,而%.2f是两个十进制数字的特定形式。您实际上可以省略Kernel,只需调用format或使用%,如下所示:

代码语言:javascript
运行
复制
"%.2f" % rand

(我更喜欢Kernel.format,对我来说似乎更容易感觉到)

现在,这又带来了另一个问题:

代码语言:javascript
运行
复制
pattern = "%.2f"
Kernel.format(pattern, 0) # => "0.00"
Kernel.format(pattern, 0.9999999) # => "1.00"

因为它在格式化时被舍入,所以数字突然不小于1。如果你们之间的意思是不包括1,那么你需要对它再做一些调整:

代码语言:javascript
运行
复制
Kernel.format(pattern, 0.floor(2)) # => "0.00"
Kernel.format(pattern, 0.9999999.floor(2)) # => "0.99"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60347186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档