2011-01-05 13 views
0

私は0とmの間のnの値を含むデータセットを持っています。簡単な数学の問題

ここでは、この値をminとmaxの間の範囲でマップしたいと考えています。しかし、どうすればいいのですか?すべてのオブジェクトにこのメソッドがある場合:

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

これは私が思っている仕事ですか?

答えて

5

試してみてください。

任意の整数/浮動小数点のために、もちろん可能
newval = val * (max - min)/m + min 

:あなたはmin..maxの範囲0..mをマッピングする話をしている場合は

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

、確かにそれはただの問題です不注意による丸めのような悪夢。

(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-mの範囲が、任意の元の範囲を取ることはありません):

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

'value'を' originalMin'で減算するのを忘れました。 – digEmAll