我有一个带有数字的哈希数组:
[
{
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 400
或100 to 200
或10 to 20
。
如果我的电话号码是316.28
,我想返回一个值300
,如果我的电话号码是363.13
,那么它应该返回400
。
我该怎么做?
如果我的数组列表包含三个数字2或四个数字,例如12.5
,123.45
或3900.56
,我想四舍五入。这些可以是数字,我的所有数组都可以具有这些数字。如果在找到长度后必须四舍五入每个数字,那就成了噩梦。我需要一个可以解决问题的函数。
答案 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