Ответ 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, например. Поэтому вы должны быть уверены, что установите это правильно и напишите несколько тестов, чтобы проверить правильность вашего кода.