Как округлить до ближайшего кратного данного фактора с числами с плавающей запятой? - PullRequest
5 голосов
/ 27 марта 2012

Вопрос в том, как округлить заданное значение до ближайшего «почти точного» множителя заданного фактора, f. Например:

Если f = 2.6, то каждый вызов «roundUp (x, 2.6)» будет возвращать число из набора {0, +/- 2.6, +/- 2 * 2.6, +/- 3 * 2.6, .. .}

Как правило, мое f - это либо степень 10 (где сила положительная или отрицательная), либо 1/2 указанной мощности 10.

Другой пример: f = 0,001, должно округляться до ближайшего целого числа, кратного 0,001, например, {0, +/- 0,001, +/- 2 * 0,001, +/- 3 * 0,001}.

ОБНОВЛЕНИЕ: я хочу, чтобы результат roundUp (x, f) был «потолком» результата, то есть наименьшего элемента из множества, кратного или превышающего x (если это правильный способ слово это). См. Мой ответ ниже для не очень элегантного решения (которое, кажется, работает во всех случаях, которые я могу довести до конца).

Все, что мне нужно, это приближение с плавающей запятой (с использованием double в Java). Любой совет с благодарностью!

1 Ответ

13 голосов
/ 27 марта 2012
double roundUp(double x, double f) {
  return f * Math.ceil(x / f);
}
...