我有以下方法来计算平均值:

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 Way”来避免这种被零除的问题?

我希望我是一个“除非那么”的运算符,例如...
average = numerator / denominator unless denominator == 0 then 0

有什么建议?

最佳答案

您可以使用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),因此这是另一种可能性。

关于ruby - ruby 方式:零除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5530970/

10-12 22:33