【问题标题】:Getting the sum of a float of numbers?获得浮点数的总和?
【发布时间】:2011-12-15 18:41:16
【问题描述】:

我有0.0 24.0 0.0 12.0 0.0 0.0 0.0 0.0 0.0 我如何获得这些值的总和? .sum 等不适用于浮点数

编辑:

我在做

<% @data.each do |data| %>
    <%= data[ :values ]%>
<%end%>

data[:values] 打印的位置 [5.0, 0.0, 0.0, 0.0, 0.0] [4.0, 0.0, 0.0, 0.0, 0.0] [1.0, 0.0, 0.0, 0.0, 0.0] 我只想得到每个数组的第一个值并将它们加在一起得到 10.0

@data 打印

[{:name=>"BMW", :values=>[0.0, 0.0, 0.0, 0.0, 0.0]}, {:name=>"Asda", :values=>[32.0, 12.0, 0.0, 0.0, 0.0]}]

【问题讨论】:

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

这里:

irb(main):001:0> values = [[1.0,0.0],[2.0,0.0],[3.0,0.0]]
=> [[1.0, 0.0], [2.0, 0.0], [3.0, 0.0]]
irb(main):002:0> values.map(&:first)
=> [1.0, 2.0, 3.0]
irb(main):003:0> values.map(&:first).inject(:+)
=> 6.0

修订:

@data.map {|hash| hash[:values].first}.inject(:+)

【讨论】:

  • 未定义方法 `first' for 0.0:Float 我不知道为什么这么说?
  • [0.0, 0.0, 0.0, 0.0, 0.0] [23.0, 24.0, 0.0, 0.0, 0.0] [0.0, 0.0, 0.0, 0.0, 0.0] [32.0, 12.0, 0.0, 0.0, 0.0] [0.0, 0.0, 0.0, 0.0, 0.0] [123.0, 0.0, 0.0, 0.0, 0.0] [0.0, 0.0, 0.0, 0.0, 0.0] [0.0, 0.0, 0.0, 0.0, 0.0] [0.0, 0.0] , 0.0, 0.0, 0.0] 是打印出来的内容
  • 您的代码显示您正在使用一个名为@data 的数组。在那个对象上试试这个,如@data.map(&amp;:first).inject(:+)。另外,告诉我@data.class 告诉你什么。
  • .class 说数组,我用@data (&:first) 的输出编辑了我的问题,得到了我不想要的名字
  • 哇...好的,所以您首先需要提取值。 @data.map {|hash| hash[:values].first}.inject(:+) 但是,从我所看到的情况来看,我认为您并不真正想要 values 数组中的第一个值。
【解决方案2】:

假设它们在一个数组中,这可行:

irb(main):001:0> [0.0, 1.0, 3.0].inject(:+)
=> 4.0

编辑:从您编辑的问题看来,您想要:

@data.reduce(0) { |sum, x| sum += x[:values][0] }

获取每个 :values 的第一个(第 0 个)元素,并将它们加在一起:

irb(main):003:0> @data
=> [{:values=>[0.0, 0.0, 0.0, 0.0, 0.0], :name=>"BMW"}, {:values=>[32.0, 12.0, 0.0, 0.0, 0.0], :name=>"Asda"}]
irb(main):004:0> @data.reduce(0) { |sum, x| sum += x[:values][0] }
=> 32.0

【讨论】:

  • 0.0:Float 的未定义方法“注入”
  • Ahmet,你应该在数组上调用注入,而不是在单个浮点数上
  • 已编辑问题请帮我重新检查
  • @Ahmet:我不确定你现在在问什么。 @data.inject(:+) 给你想要的吗?我对 RoR 不够熟悉,无法确定您在问什么。
  • 如果你在 Array 上调用它,这应该完全符合你的要求。
【解决方案3】:

您需要以某种奇特的方式得到总和,还是可以循环进行?

我会这样做:

sum = 0
array.each do |a|
  sum+=a
end

【讨论】:

  • 在 ruby​​ 中有很多更好的方法可以做到这一点。见Array#reduce
  • 几乎所有非 BASIC 语言都有更好的方法来做到这一点。
【解决方案4】:

如果你有它们的数组:

[0.0, 24.0, 0.0, 12.0, 0.0, 0.0, 0.0, 0.0, 0.0].reduce(:+)

如果不是 - 使用 +。

0.0 + 24.0 + 0.0 + 12.0 + 0.0 + 0.0 + 0.0 + 0.0 + 0.0

=> 36.0 还是我错过了什么?

【讨论】:

    猜你喜欢
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 2012-08-29
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多