使用概率对数字进行舍入的简单Ruby方法可能是什么,即基于值与一个边界或另一个边界(地板或天花板)的接近程度?
例如,假设当前价格值为28.33,我需要添加0.014。
相当于从28.34开始并需要添加0.004,但最终值必须四舍五入到两位小数(可以作为参数提供,或者现在修复)。
因此,最终值应为:
它出现的原因可能是最好的,因为应用程序在运行时是无状态且独立的,但仍需要近似累积通常舍入为遗忘的较低有效数字的净效应(例如,确实存在的微量数值)对时间的影响)。例如,每天通过一些变量增量减少止损(相反,减去上面的-0.014)。
将此方法直接扩展到Float类会很有用。
答案 0 :(得分:2)
怎么样:
rand(lower..upper) < current ? lower.round(2) : upper.round(2)
编辑:
以上只有在使用Ruby 1.9.3时才会起作用(由于早期版本不支持范围内的rand)。
否则
random_number = rand * (upper-lower) + lower
random_number < current ? lower.round(2) : upper.round(2)
答案 1 :(得分:0)
使用此方法伤害:
class Float
def roundProb(delta, prec=2)
ivalue=self
chance = rand # range 0..1, nominally averaged at 0.5
# puts lower=((ivalue + delta)*10**prec -0.5).round/10.0**prec # aka floor
# puts upper=((ivalue + delta)*10**prec +0.5).round/10.0**prec # ceiling
ovalue=((ivalue + delta)*10**prec +chance-0.5).round/10.0**prec # proportional probability
return ovalue
rescue
puts $@, $!
end
end
28.33.roundProb(0.0533)
=> 28.39
也许不是最优雅的方法,但似乎适用于任何精度的一般情况,默认2.甚至适用于Ruby 1.8.7我坚持在一个案例中,缺少{{1}的精度参数}。