Ответ 1
Класс BigDecimal
имеет три метода, которые могут представлять интерес для этого:
-
precision()
, который возвращает количество цифр для немасштабированного значения (например, для числа 123.45, возвращаемая точность равна 5) -
scale()
, который возвращает число цифр после десятичного разделителя, когда положительный (scale()
может быть отрицательным, в этом случае немасштабированное значение числа умножается на десять на силу отрицания шкалы Например, шкала -3 означает, что значение немасштабированного значения умножается на 1000), -
stripTrailingZeros()
, который возвращаетBigDecimal
со всеми конечными нулями, удаленными из представления.
Например, чтобы вычислить точность и масштаб для данного BigDecimal
b, мы можем написать что-то вроде этого:
BigDecimal noZero = b.stripTrailingZeros();
int scale = noZero.scale();
int precision = noZero.precision();
if (scale < 0) { // Adjust for negative scale
precision -= scale;
scale = 0;
}