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