gpt4 book ai didi

ruby-on-rails - rails : Averaging an array of time

转载 作者:数据小太阳 更新时间:2023-10-29 08:32:23 24 4
gpt4 key购买 nike

我有一个这样的数组:["18:45", "18:45", "18:58"]

这是我用来平均时间的方法:

  def avg_of_times(array_of_time)
size = array_of_time.size
avg_minutes = array_of_time.map do |x|
hour, minute = x.split(':')
total_minutes = hour.to_i * 60 + minute.to_i
end.inject(:+)/size
"%s:%s" % avg_minutes.divmod(60)
end

如果我在 irb 控制台中运行上面的相同方法,平均值就很好,但在 Rails 中,结果如下:18:148/3

是什么导致此方法在 Rails 中无法正常运行?

Rails version: 3.2.14
Ruby version: 1.9.3-p429

最佳答案

您的代码可以在我的 IRB 控制台、Rails 3.2.11Ruby 1.9.3-p448 中运行。


问题是您在计算中得到了一个 float ,而这个 float 变成了一个 Rational 对象(解决无穷无尽的 .33 小数)。我会试试这个:

def avg_of_times(array_of_time)
size = array_of_time.size
avg_minutes = array_of_time.map do |x|
hour, minute = x.split(':')
total_minutes = hour.to_i * 60 + minute.to_i
end.inject(:+)/size
"%s:%s" % avg_minutes.divmod(60).map(&:to_i)
#^^^^^^^^^^^ here is the new part
end

或者像@Matt 建议的那样,将总分钟数四舍五入可能会解决您的问题:

"%s:%s" % avg_minutes.round.divmod(60)

关于ruby-on-rails - rails : Averaging an array of time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19282582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com