Округление Java BigDecimal до ближайшего интервала

У меня есть результат вычисления BigDecimal, который мне нужно округлить до ближайшего заданного интервала (в этом случае это размер финансового рынка).

например. Цена [Размер тика] → Закругленная цена

100.1 [0.25] -> 100
100.2 [0.25] -> 100.25
100.1 [0.125] -> 100.125
100.2 [0.125] -> 100.25

Спасибо.

Обновление: решение schnaader, переведенное в Java/BigDecimal термины:

price = price.divide(tick).setScale(0, RoundingMode.HALF_UP).multiply(tick)

Ответы

Ответ 1

Вы можете нормализовать размер галочки, а затем использовать обычные методы округления:

100.1 [0.25] -> * (1/0.25) -> 400.4 [1]  -> round -> 400 -> / (1/0.25) -> 100
100.2 [0.25] -> * (1/0.25) -> 400.8 [1] -> round -> 401 -> / (1/0.25) -> 100.25

Итак, это должно быть:

Price = Round(Price / Tick) * Tick;

Также обратите внимание, что вам, похоже, нужно установить правильный режим округления для BigDecimals. См. BigDecimal Docs, например. Поэтому вы должны быть уверены, что установите это правильно и напишите несколько тестов, чтобы проверить правильность вашего кода.

Ответ 2

p= p - p % t + ((p % t < t / 2) ? 0.0 : t);

//где p = цена и t = приращение тика