2011-01-05 2 views
0

У меня есть набор данных, содержащий n значений от 0 до m.Простая математическая задача

Теперь я хочу отобразить эти значения в диапазоне от min до max. Но как мне это сделать? Если у меня есть в каждом объекте этот метод:

public double getValue(int min, int max) { 
    // return value between min and max; 
} 

Это хотите работать, я думаю?

ответ

5

Try:

return min + (max - min) * (val/m); 
3

Если вы говорите, отображающая диапазон 0..m в min..max, конечно, это всего лишь вопрос:

newval = val * (max - min)/m + min 

позволяет, конечно, для любого целого числа/с плавающей точкой gotchas, как непреднамеренное округление.

Умножение на (max - min)/m будет масштабировать его до нужного диапазона, и добавление min даст ему правильное нижнее смещение.

+0

Это кажется, что им ищет – RoflcoptrException

+0

Я не думаю, что это работает. Попробуйте подключить m = 10, val = 5; –

+0

>>> min, max, m = 5, 10, 100 >>> 6 * (max - min) + min 35 - это не масштабируется между 'min' и' max'. – marcog

2

Этот код немного более общий характер (не принимать только 0-м диапазоне, но и любой оригинальный диапазон):

public double GetValue(int value, 
         int min, 
         int max, 
         int originalMin, 
         int originalMax) 
{ 
    return min + (double)(value - originalMin) * (max - min)/(originalMax - originalMin); 
} 
// in your case originalMin = 0, and originalMax = m 
+0

Забыл вычесть 'значение' на' originalMin', исправлено – digEmAll

Смежные вопросы