我有以下方法来计算平均值:
def compute_average(a,b,c,d,e)
total = [a,b,c,d,e].sum.to_f
average = [a, 2*b, 3*c, 4*d, 5*e].sum / total
average.round(2)
end
这没什么特别的,但它有一个我认为所有平均方程都会有的问题:如果输入都是零,它可能会被零除。
所以,我想这样做:
def compute_average(a,b,c,d,e)
total = [a,b,c,d,e].sum.to_f
if total==0
average = 0.00
else
average = [a, 2*b, 3*c, 4*d, 5*e].sum / total
average.round(2)
end
end
..。这很管用,但对我来说感觉很笨拙。有没有一种更优雅的"Ruby方式“来避免这种被零除的问题?
我希望我有一个“除非然后”的操作员,就像...
average = numerator / denominator unless denominator == 0 then 0
有什么建议吗?
发布于 2011-04-04 00:53:30
您可以使用nonzero?
,如下所示:
def compute_average(a,b,c,d,e)
total = [a,b,c,d,e].sum.to_f
average = [a, 2*b, 3*c, 4*d, 5*e].sum / (total.nonzero? || 1)
end
更多的人会更熟悉使用三元运算符(total == 0 ? 1 : total)
,所以这是另一种可能性。
发布于 2011-04-04 13:16:23
通常依赖rescue
来捕获异常,然后返回默认值:
def compute_average(a, b, c, d, e)
total = [a, b, c, d, e].sum.to_f
average = [ a, 2*b, 3*c, 4*d, 5*e ].sum / total
average.round(2)
rescue ZeroDivisionError
0.0
end
我还会写道:
average = numerator / denominator unless denominator == 0 then 0
作为
average = (denominator == 0) ? 0 : numerator / denominator
发布于 2014-12-15 18:23:11
虽然这是一个过时的帖子,但我想我应该加入一个简单的线条,你可以使用……
@average = variable1 / variable2 rescue 0
https://stackoverflow.com/questions/5530970
复制相似问题