2014-01-21 4 views
5

Я хотел бы округлить число, основанное на соотношении двух значений.Круглое число, основанное на коэффициенте в C#

Отношение будет включать в себя значения, которые больше или меньше, чем исходное значение, где

ratio = newValue/originalvalue 

Когда новое_значение> originalValue могу округление до ближайшего нижнего фактора с помощью:

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

Для пример:

  • factor = 2
  • отношение
  • = 3
  • NearestLowerFactor = 2

Когда новое_значение < originalValue Я хотел бы округлить до ближайшей обратной фактор.

Таким образом, если коэффициент равен 2 Я хотел бы закруглить на основе факторов 1/2, то есть 1/2, 1/4, 1/8, 1/16 и т.д.

Например :

  • originalValue = 8
  • новое_значение = 3
  • отношение = 0,375
  • NearestLowerFactor = 0,25 или 1/4.

Как бы я мог округлить до ближайшего более низкого коэффициента в этом случае?

ответ

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

Это замечательно. Я бы никогда не подумал об этом! Меня заставляет задуматься, есть ли формула, которая будет работать в обоих случаях, то есть ** newValue> originalValue ** и ** newValue user1423893

+0

@ user1423893 Попробуйте, это работает. – Rik

+0

Это не работает для меня, когда 'ratio = 36' и' factor = 16'. Можете ли вы подтвердить, что вы получаете 32 с этими значениями? – user1423893

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