根据数字创建范围

时间:2018-07-25 10:19:18

标签: ruby numbers

我有一个带有数字的哈希数组:

 [
    {
    y: 316.28,
    label: "Kaimur",
    color: "Light_Green"
    },
    {
    y: 323.63,
    label: "Banka",
    color: "Light_Green"
    },
    {
    y: 327.85,
    label: "Gaya",
    color: "Light_Green"
    },
    {
    y: 346.11,
    label: "EastChamparan",
    color: "Light_Green"
    },
    {
    y: 358.38,
    label: "Nalanda",
    color: "Light_Green"
    },
    {
    y: 363.13,
    label: "Madhubani",
    color: "Light_Green"
    }
]

这里我的第一个数字是316.28,最后一个数字是363.13。我想从像300 to 400这样的数组创建范围。这是一个使用数组的第一个和最后一个元素的示例。

我想使其像300 to 400100 to 20010 to 20

如果我的电话号码是316.28,我想返回一个值300,如果我的电话号码是363.13,那么它应该返回400

我该怎么做?

如果我的数组列表包含三个数字2或四个数字,例如12.5123.453900.56,我想四舍五入。这些可以是数字,我的所有数组都可以具有这些数字。如果在找到长度后必须四舍五入每个数字,那就成了噩梦。我需要一个可以解决问题的函数。

1 个答案:

答案 0 :(得分:6)

Float#round与否定参数一起使用:

316.28.round(-2)
#⇒ 300
363.13.round(-2)
#⇒ 400

input = _
#⇒ [{:y=>316.28, :label=>"Kaimur", :color=>"Light_Green"},
#   {:y=>323.63, :label=>"Banka", :color=>"Light_Green"},
#   {:y=>327.85, :label=>"Gaya", :color=>"Light_Green"},
#   {:y=>346.11, :label=>"EastChamparan", :color=>"Light_Green"},
#   {:y=>358.38, :label=>"Nalanda", :color=>"Light_Green"},
#   {:y=>363.13, :label=>"Madhubani", :color=>"Light_Green"}]
ys = input.map { |e| e[:y] }
#⇒ [316.28, 323.63, 327.85, 346.11, 358.38, 363.13]
Range.new *[ys.min, ys.max].map { |e| e.round(-e.round.to_s.length+1) }
#⇒ 300..400