2011-01-05 7 views
0

Ich habe einen Datensatz mit n Werten zwischen 0 und m.Einfaches mathematisches Problem

Jetzt möchte ich diese Werte im Bereich zwischen min und max zuordnen. Aber wie mache ich das? Wenn ich in jedem Objekt diese Methode habe:

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

Das will Arbeit, denke ich?

Antwort

5

Versuchen:

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

Wenn Sie den Bereich um die Abbildung 0..m zu min..max sprechen sind, sicher, das ist nur eine Frage von:

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

natürlich so dass für jede ganze Zahl/Gleitkommazahlen Fehler wie unbeabsichtigtes Runden.

Die Multiplikation mit wird auf den richtigen Bereich skaliert und die Addition von min gibt den korrekten unteren Offsetwert.

+0

Dies scheint für – RoflcoptrException

+0

suchen das, was im zu sein, ich glaube nicht, diese funktioniert. Versuchen Sie, m = 10, val = 5; –

+0

>>> min, max, m = 5, 10, 100 >>> 6 * (max - min) + min 35 - das ist nicht skaliert zwischen 'min' und' max'. – marcog

2

Dieser Code ein bisschen mehr generisch ist (nehmen Sie nicht nur 0-m Reichweite, aber jede ursprüngliche Strecke):

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

Vergessen, 'Wert' durch' OriginalMin' zu subtrahieren, behoben – digEmAll