2014-01-21 6 views
5

Ich möchte eine Zahl runden, die auf Verhältnis von zwei Werten basiert.Runden Sie eine Zahl basierend auf einem Verhältnis in C#

Das Verhältnis wird Werte enthalten, die größer oder kleiner als der ursprüngliche Wert sind, wo

ratio = newValue/originalvalue 

Wenn newValue> Originalvalue Ich kann rund um die nächstniedrigere Faktor mit:

double NearestLowerFactor(float value, double factor) 
{ 
    return Math.Floor(value/factor) * factor; 
} 

Für Beispiel:

  • Faktor = 2
  • Verhältnis = 3
  • NearestLowerFactor = 2

Wenn newValue < Originalvalue ich zum nächsten Kehrwert des Faktors abzuzurunden möge.

Deshalb, wenn der Faktor 2 ist, würde ich auf Faktoren von 1/2 basierend abzuzurunden mag, ist, dass 1/2, 1/4, 1/8, 1/16, usw.

Zum Beispiel :

  • Originalvalue = 8
  • newValue = 3
  • Verhältnis = 0,375
  • NearestLowerFactor = 0,25 oder 1/4.

Wie würde ich in diesem Fall auf den nächsten niedrigeren Faktor aufspulen?

Antwort

1
Math.Pow(factor, Math.Floor(Math.Log(ratio, factor))) 
+0

Das ist ausgezeichnet. Ich hätte nie daran gedacht! Ich frage mich, ob es eine Formel gibt, die in beiden Fällen funktionieren würde, also ** newValue> originalValue ** und ** newValue user1423893

+0

@ user1423893 Versuchen Sie es, es funktioniert. – Rik

+0

Es funktioniert nicht für mich, wenn "Verhältnis = 36" und "Faktor = 16". Können Sie bestätigen, dass Sie 32 mit diesen Werten erhalten? – user1423893

Verwandte Themen