Если вы используете относительно небольшие массивы (и поэтому не слишком беспокоитесь об эффективности), то это должно работать нормально:
def down_to_array num, arr
arr.select{|y| y < num}.sort_by{|z| num-z }.first
end
Например:
myarr = [0,5,7,8,11,16]
puts down_to_array 6.5, myarr #=> 5