ruby - 如何最好地在两个 float 之间的范围内创建一个随机 float

标签 ruby

我知道我可以用 rand(max) 生成随机 float 。我试图生成一个范围内的 float ,这应该不难。但是例如 rand(1.4512) 返回 0,因此 rand 不是用 float 计算的。现在我尝试了一个小技巧,将它转换为一个整数,然后在我想要的范围内随机化一个合适的数字后,将它计算回一个 float ......这是行不通的。

我的问题是如何以更好的方式做到这一点。如果没有更好的方法,为什么这个方法不起作用? (也许对我来说太晚了,我应该在 2 小时前开始 sleep ……)。整个事情旨在成为一种计算数据库记录“位置”字段的方法,以便用户可以手动订购它们。我以前从未做过这样的事情,也许有人可以用更好的解决方案提示我。

这是目前的代码:

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

最佳答案

将一系列 float 传递给 rand

如果您想“在两个 float 之间的范围内创建一个随机 float ”,只需将一系列 float 传递给 rand

rand(11.2...76.9)

(使用 Ruby 2.1 测试)

编辑

根据文档:https://ruby-doc.org/core-2.4.0/Random.html

有两种不同的方式来编写随机函数:包含和排除对于最后一个值

rand(5..9)      # => one of [5, 6, 7, 8, 9]
rand(5...9)     # => one of [5, 6, 7, 8]
rand(5.0..9.0)  # => between 5.0 and 9.0, including 9.0
rand(5.0...9.0) # => between 5.0 and 9.0, excluding 9.0

关于ruby - 如何最好地在两个 float 之间的范围内创建一个随机 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1711681/

相关文章:

ruby - 在没有组合标记的情况下计算 Unicode 字符串长度

ruby - "<top (required)>"在 Ruby 堆栈跟踪中意味着什么?

ruby - "convenience"创建哈希的方法

ruby - 为什么我不能用 gsub 替换字符串中的 '\\+'?

ruby - 如何在 UTF-8 字符上使用 String 方法?

Ruby 作用域:MyClass.new 和::MyClass.new 之间的区别

ruby-on-rails - 如何为初始化变量创建验证?

ruby - 在 Ruby 的类范围内使用 @variable 是否正确?

ruby - Java 到 JRuby 到 Resque

ruby-on-rails - NoMethodError:为 #<URI::Generic:0x000055d4f2e16f00> 调用私有(private)方法 `open'