Ecco come lo capisco:
Quale percentuale si x
trova in un intervallo
Supponiamo che tu abbia un intervallo da 0
a 100
. Dato un numero arbitrario di quell'intervallo, in quale "percentuale" di quell'intervallo si trova? Questo dovrebbe essere piuttosto semplice, 0
sarebbe 0%
, 50
sarebbe 50%
e 100
sarebbe 100%
.
Ora, che cosa se l'intervallo è stato 20
per 100
? Non possiamo applicare la stessa logica di cui sopra (dividere per 100) perché:
20 / 100
non ci dà 0
( 20
dovrebbe essere 0%
ora). Questo dovrebbe essere semplice da risolvere, dobbiamo solo creare il numeratore 0
per il caso di 20
. Possiamo farlo sottraendo:
(20 - 20) / 100
Tuttavia, questo non funziona 100
più perché:
(100 - 20) / 100
non ci dà 100%
. Ancora una volta, possiamo risolvere questo problema sottraendo anche dal denominatore:
(100 - 20) / (100 - 20)
Un'equazione più generalizzata per scoprire quale% si x
trova in un intervallo sarebbe:
(x - MIN) / (MAX - MIN)
Scala l'intervallo su un altro intervallo
Ora che sappiamo in quale percentuale un numero si trova in un intervallo, possiamo applicarlo per mappare il numero su un altro intervallo. Facciamo un esempio.
old range = [200, 1000]
new range = [10, 20]
Se abbiamo un numero nel vecchio intervallo, quale sarebbe il numero nel nuovo intervallo? Diciamo che il numero è 400
. In primo luogo, capire quale percentuale 400
è all'interno del vecchio intervallo. Possiamo applicare la nostra equazione sopra.
(400 - 200) / (1000 - 200) = 0.25
Quindi, 400
risiede nella 25%
vecchia gamma. Dobbiamo solo capire quale sia il numero 25%
della nuova gamma. Pensa a ciò che 50%
di [0, 20]
è. Sarebbe 10
giusto? Come sei arrivato a quella risposta? Bene, possiamo semplicemente fare:
20 * 0.5 = 10
Ma che dire di [10, 20]
? Dobbiamo spostare tutto 10
ormai. per esempio:
((20 - 10) * 0.5) + 10
una formula più generalizzata sarebbe:
((MAX - MIN) * PERCENT) + MIN
Per l'esempio originale di ciò che 25%
di [10, 20]
è:
((20 - 10) * 0.25) + 10 = 12.5
Quindi, 400
nell'intervallo [200, 1000]
sarebbe mappato 12.5
nell'intervallo[10, 20]
TLDR
Per mappare x
dal vecchio intervallo al nuovo intervallo:
OLD PERCENT = (x - OLD MIN) / (OLD MAX - OLD MIN)
NEW X = ((NEW MAX - NEW MIN) * OLD PERCENT) + NEW MIN