我知道我可以使用rand(max)生成随机浮点数.我试图在一个范围内生成一个浮点数,这应该不难.但是例如rand(1.4512)返回0,因此rand不用浮点数计算.现在我尝试了一个小技巧,将事物转换为整数,然后在我想要的范围内随机化一个拟合数,然后将它计算回浮点数......这是不行的.
我的问题是如何以更好的方式做到这一点.如果没有更好的方法,为什么这个不起作用?(也许对我来说太晚了,我应该在2小时前开始睡觉了......).整个过程旨在成为计算数据库记录的"位置"字段的方法,以便用户可以手动订购它们.我之前从未做过这样的事情,也许有人可以用更好的解决方案暗示我.
这是迄今为止的代码:
def calculate_position(@elements, index)
min = @elements[index].position
if @elements[index + 1].nil?
pos = min + 1
else
pos = min + (rand(@elements[index + 1].position * 10000000000) / 10000000000)
end
return pos
end
Run Code Online (Sandbox Code Playgroud)
谢谢!
Nat*_*ong 85
rand如果你想"在两个浮点数之间创建一个随机浮点数",只需传递一系列浮点数即可rand.
rand(11.2...76.9)
Run Code Online (Sandbox Code Playgroud)
(使用Ruby 2.1测试)
Jos*_*osh 49
让我们回顾一下:
rand()将生成一个介于0和1之间的(伪)随机浮点数.
rand(int)将生成0和int之间的(伪) - 随机整数.
所以类似于:
def range (min, max)
rand * (max-min) + min
end
Run Code Online (Sandbox Code Playgroud)
应该做得很好.
更新:
刚刚通过一个小单元测试测试:
def testRange
min = 1
max = 100
1_000_000.times {
result = range min, max
print "ERROR" if result < min || result > max
}
end
Run Code Online (Sandbox Code Playgroud)
看起来很好.
小智 12
在1.9和2.0中,您可以为rand提供范围参数:
irb(main):001:0> 10.times { puts rand Math::E..Math::PI }
3.0656267148715446
2.7813979580609587
2.7661725184200563
2.9745784681934655
2.852157154320737
2.741063222095785
2.992638029938756
3.0713152547478866
2.879739743508003
2.7836491029737407
=> 10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31277 次 |
| 最近记录: |