Last Updated: February 25, 2016
·
1.363K
· depl0y

Calculating the percentage from a point within a range

Thanks to an awesome answer on math.stackexchange.com I just wanted to make a note to self. For quite a few controls it is needed to calculate the percentage of a certain point within a range (for example when building a custom slider control).

Let's say we have the following values:

float _minValue = 0;
float _maxValue = 200;
float _value = 50;

Using simple values here, to demonstrate that it works.

float _percentage = ((_value - _minValue) / (_maxValue - _minValue)) * 100;

This ends up in:

((50 - 0) / (200 - 0)) * 100 = 25

But we already knew that 50 is 25% in a 0 to 200 scale, right? But now lets do it the other way around. Let's say we have the following values:

float _minValue = 0;
float _maxValue = 200;
float _percentage = 25;

Now we can calculate the value that belongs with that percentage on the specified scale:

float _value = (1.0f/100.0f) * ((_percentage * _maxValue) + (100 * _minValue) - (_percentage * _minValue));

This ends up in:

(1/100) * ((25 * 200) + (100 * 0) - (25 * 0)) = 50

Amazing, right? This also works with ranges that have negative _minValue's, etc.