当分数分量为0.5时对浮点数进行四舍五入的Ruby方法

当分数分量为0.5时对浮点数进行四舍五入的Ruby方法,ruby,Ruby,我正在处理一个统计问题,如果分数部分为0.5,则需要随机向上或向下取整。下面的代码应该可以工作 def round_random(x) return x.round unless x.modulo(1) == 0.5 x.floor + rand(2) end 但是我记得在ruby中进行过一些讨论,所以我想知道是否有一个标准的方法来实现它。由于ruby 2.4,使用可选的关键字参数half来指定“[…]个数字的舍入模式,这些数字在两个可能的舍入值之间有一半” 你的方法是: de

我正在处理一个统计问题,如果分数部分为0.5,则需要随机向上或向下取整。下面的代码应该可以工作

def round_random(x)
    return x.round unless x.modulo(1) == 0.5
    x.floor + rand(2)
end
但是我记得在ruby中进行过一些讨论,所以我想知道是否有一个标准的方法来实现它。

由于ruby 2.4,使用可选的关键字参数
half
来指定“[…]个数字的舍入模式,这些数字在两个可能的舍入值之间有一半”

你的方法是:

def round_random(x)
  x.round(half: [:up, :down].sample)
end

round_random(2.6) #=> 3 (always)

round_random(2.5) #=> 2
round_random(2.5) #=> 3
round_random(2.5) #=> 2

round_random(2.4) #=> 2 (always)
还有一个
:偶数
,它实现了一个规则,在平局时通过四舍五入到下一个偶数来避免偏差:

1.5.round(half: :even) #=> 2
2.5.round(half: :even) #=> 2
3.5.round(half: :even) #=> 4
4.5.round(half: :even) #=> 4
也许这对您的问题来说是一个更具确定性的选择。

因为Ruby 2.4采用了可选的关键字参数
half
来指定“[…]个介于两个可能的舍入值之间的数字”的舍入模式

你的方法是:

def round_random(x)
  x.round(half: [:up, :down].sample)
end

round_random(2.6) #=> 3 (always)

round_random(2.5) #=> 2
round_random(2.5) #=> 3
round_random(2.5) #=> 2

round_random(2.4) #=> 2 (always)
还有一个
:偶数
,它实现了一个规则,在平局时通过四舍五入到下一个偶数来避免偏差:

1.5.round(half: :even) #=> 2
2.5.round(half: :even) #=> 2
3.5.round(half: :even) #=> 4
4.5.round(half: :even) #=> 4

也许这对你的问题来说更具决定性。

你的意思是“分数”而不是“派系”?我的意思是分数而不是派系,我一定读了太多的政治评论。我已经编辑过了,你是说“分数”而不是“派系”吗?我是说分数而不是派系,我一定读了太多的政治评论。我已经据此编辑了此答案,但我认为此功能的初衷是在这种情况下简单地使用
:偶数
选项,它将“向最近的偶数取整一半”,从长远来看,它将给出相同的结果,而不实际返回随机结果。我认为这实际上就是OP所提到的。这个答案会达到目的,但我认为该功能的初衷是在这种情况下简单地使用
:偶数
选项,它将“向最近的偶数取整一半”,从长远来看,在不返回随机结果的情况下给出相同的结果。我认为这就是OP所提到的。