BigDecimal — существенные десятичные разряды

#java #bigdecimal

#java #bigdecimal

Вопрос:

У меня есть значение BigDecimal, и я хочу знать, находится ли количество десятичных разрядов, которое оно имеет, за пределами границы.

например, если BigDecimal равно 123,456, а моя граница десятичных разрядов равна 2, то это будет ошибкой

Однако 123.450 с границей 2 в порядке, поскольку я считаю, что 0 не имеет значения для этого теста.

Я немного не уверен в BigDecimal с его масштабируемой / немасштабируемой реализацией.

Я рассматривал scale() это как вариант, но я думаю, что это может быть неправильно для моего случая, когда речь идет о конечных нулях.

Кто-нибудь знает правильный способ проверить это?

Ответ №1:

BigDecimal имеет stripTrailingZeros() . После этого scale() вы будете делать то, что хотите.

ИЛИ вы могли бы использовать BigDecimal.setScale(2, RoundingMode.UNNECESSARY) which выдаст исключение, если есть ненулевые значения. Для меня это выглядит немного неэффективно в общем случае. Но если вы все равно создадите исключение, это может быть полезно.