Вот как я это понимаю:
Какой процент x
лежит в диапазоне
Предположим, у вас есть диапазон от 0
до 100
. Учитывая произвольное число из этого диапазона, в каком «проценте» из этого диапазона он лежит? Это должно быть довольно просто, 0
было бы 0%
, 50
будет 50%
и 100
будет 100%
.
Теперь, если ваш диапазон был 20
в 100
? Мы не можем применять ту же логику, что и выше (делим на 100), потому что:
20 / 100
не дает нам 0
( 20
должно быть 0%
сейчас). Это должно быть легко исправить, нам просто нужно сделать числитель 0
для случая 20
. Мы можем сделать это, вычитая:
(20 - 20) / 100
Однако это больше не работает 100
, потому что:
(100 - 20) / 100
не дает нам 100%
. Опять же, мы можем исправить это, вычтя и знаменатель:
(100 - 20) / (100 - 20)
Более обобщенное уравнение для определения того, что% x
лежит в диапазоне:
(x - MIN) / (MAX - MIN)
Шкала диапазона в другой диапазон
Теперь, когда мы знаем, какой процент находится в диапазоне, мы можем применить его, чтобы отобразить число в другой диапазон. Давайте рассмотрим пример.
old range = [200, 1000]
new range = [10, 20]
Если у нас есть число в старом диапазоне, каким будет число в новом диапазоне? Допустим, номер есть 400
. Сначала выясните, какой процент 400
находится в старом диапазоне. Мы можем применить наше уравнение выше.
(400 - 200) / (1000 - 200) = 0.25
Итак, 400
лежит в 25%
старом ассортименте. Нам просто нужно выяснить, какое число 25%
из нового ассортимента. Подумайте о том, что 50%
в [0, 20]
это. Это было бы 10
правильно? Как вы пришли к этому ответу? Ну, мы можем просто сделать:
20 * 0.5 = 10
Но как насчет [10, 20]
? Нам нужно все 10
сейчас сдвинуть . например:
((20 - 10) * 0.5) + 10
более обобщенная формула будет:
((MAX - MIN) * PERCENT) + MIN
Для первоначального примера того , что 25%
в [10, 20]
это:
((20 - 10) * 0.25) + 10 = 12.5
Таким образом, 400
в диапазоне [200, 1000]
будет 12.5
в диапазоне[10, 20]
TLDR
Чтобы отобразить x
старый диапазон на новый:
OLD PERCENT = (x - OLD MIN) / (OLD MAX - OLD MIN)
NEW X = ((NEW MAX - NEW MIN) * OLD PERCENT) + NEW MIN