Как провести обратный инжиниринг BigDecimal setScale () с RoundingMode.HALF_EVEN в Java для функциональности поиска? - PullRequest
0 голосов
/ 15 октября 2019

Я даю пользователю возможность самостоятельно устанавливать точность (масштаб) после десятичной дроби для всего приложения, например,
Точность, установленная пользователем: 3
число: 123,9991
отображение на веб-сайте: 124,000

Теперь я также предоставляю пользователю возможность поиска по набору чисел.
Если он задает - от 123 до 123 -- Нет результата (ожидается)
Если он установит - от 124 до 124 --- Нет результата (Не ожидается)

Я думаю использовать BigDecimal setScale (), который является Javaэквивалент Javascript's Number (значение) .toFixed (точность)

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

Я пробовал следующее:

  1. MongoDb $ round ---- но это даст проблемы с производительностью.
  2. Я пытался подставить или добавить общее целое число перед поиском, но это не работает для некоторых угловых сценариев. (Что является оптимальным способом)

      static BigDecimal getModMinNumber( BigDecimal minNumber, Integer precision)
    {
        minNumber.subtract(new BigDecimal("0.00050")); // for precision 3
        return minNumber.setScale(precision, RoundingMode.HALF_EVEN);
    }    
    
      static BigDecimal getModMaxNumber( BigDecimal maxNumber, Integer precision)
        {
            maxNumber.add(new BigDecimal("0.00050")); // for precision 3
            return maxNumber.setScale(precision, RoundingMode.HALF_EVEN);
        } 
    

Я ожидаю, что он будет правильно искать и получать результат, ожидаемый пользователем.

...