Вы должны рассчитать прогресс на основе ЧАСТЕЙ, которые вы разделили.В вашем случае вы разделяете диапазон на 5 частей.
- Шаг 1: Найдите, в какой части находится текущая точка. (Если точка 30, она состоит из 2 частей - (0..3) и (3..20))
- Шаг 2: Найти, какой процент от точки в текущей части (если точка равна 30, текущая часть равна (20 ... 50) -> процент = (30 - 20) / (50 - 20) = 0,333
- Шаг 3: Объедините их и разделите номер детали.
Пример кода:
PARTS = [(0..3), (3..20), (20..50), (50..200), (200..1000)]
PARTS_NUMBER = PARTS.size # 5
def calculate_percentage point
part_index = PARTS.find_index {|x| x.include?(point)}
part = PARTS[part_index]
remain = (point - part.first) * 1.0 / (part.last - part.first)
(part_index + remain) / PARTS_NUMBER
end
calculate_percentage(30) # => 0.4666666666666667
Надеюсь, это поможет: D