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

Вопрос заключается в том, как округлить заданное значение до ближайшего "почти точного" кратного заданный фактор, 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). Любые советы очень ценятся!

5
задан les2 27 March 2012 в 14:45
поделиться