从数字创建范围

Nil*_*ngh 0 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"
    }
]
Run Code Online (Sandbox Code Playgroud)

这是我的第一个号码316.28,最后一个号码是363.13.我想从这个数组创建范围300 to 400.这是使用数组的第一个和最后一个元素的示例.

我想让它像300 to 400100 to 20010 to 20.

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

我怎样才能做到这一点?

如果我的数组列表有三个数字2或4个数字,如,或12.5,我想舍入我的值.这些可以是数字,我的所有数组都可以有这些数字.如果我在找到一个长度后必须围绕每个数字,这就变成了一场噩梦.我需要一个可以做到这一点的功能.123.453900.56

Ale*_*kin 6

使用Float#round否定参数:

316.28.round(-2)
#? 300
363.13.round(-2)
#? 400
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)