Ось як я це розумію:
Який відсоток 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