首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rand(1e9..1e10).to_i和rand.to_s[2..11].to_i的区别

问rand(1e9..1e10).to_i和rand.to_s[2..11].to_i的区别
EN

Stack Overflow用户
提问于 2017-03-14 15:48:51
回答 2查看 400关注 0票数 0

在Ruby2.3.0中,当我使用rand.to_s[2..11].to_i在ActiveRecord中的循环中多次插入内容时,它会验证length: {maximum: 10, minimum: 10}。在一些迭代之后,我得到了一个错误,长度验证失败!当我在相同的场景中执行rand(1e9...1e10).to_i时,问题就解决了。我想知道这两个有什么不同。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-14 16:02:30

不带参数的#rand会生成一个介于0和1之间的随机数。

这可以是0.01111111111111。然后,to_s[2..12]取小数点后的前10位。

代码语言:javascript
复制
'01'.to_i # => 1

因此,您可能会得到小于10的长度。

票数 3
EN

Stack Overflow用户

发布于 2017-03-14 15:59:16

不带参数的Kernel#rand返回区间[0.0,1.0]内的伪随机Float。因此,它可以返回像0.0或0.123这样的值,它们的字符串表示少于12个字符,所以,如果您采用"0.123"[2..11],它将返回"123"。

rand(range)返回给定Range中的伪随机Integer,因此rand(1e9...1e10)总是返回整数部分为10位的数字。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42780403

复制
相关文章

相似问题

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