Метод setScale
Метод setScale класса BigDecimal устанавливает
масштаб числа и возвращает новый объект BigDecimal.
Масштаб - это количество знаков после десятичной точки.
В первый параметр мы передаем целое число - новый масштаб.
Вторым необязательным параметром мы передаем режим округления
RoundingMode, который определяет, как округлять число,
если при изменении масштаба приходится отбрасывать знаки.
Если второй параметр не указан, а округление необходимо,
метод выбрасывает исключение ArithmeticException.
Исходный объект при этом не изменяется, так как
BigDecimal является неизменяемым классом.
Синтаксис
bigDecimal.setScale(newScale)
bigDecimal.setScale(newScale, roundingMode)
Пример
Давайте уменьшим масштаб числа до 2 с округлением
по правилу HALF_UP (обычное математическое округление):
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main
{
public static void main(String[] args)
{
BigDecimal num = new BigDecimal("123.456");
BigDecimal res = num.setScale(2, RoundingMode.HALF_UP);
System.out.println(res);
}
}
Результат выполнения кода:
123.46
Пример
Давайте увеличим масштаб числа до 4.
В этом случае число дополняется нулями, и режим
округления не требуется:
import java.math.BigDecimal;
public class Main
{
public static void main(String[] args)
{
BigDecimal num = new BigDecimal("123.45");
BigDecimal res = num.setScale(4);
System.out.println(res);
}
}
Результат выполнения кода:
123.4500
Пример
Если округление необходимо, а режим не указан, метод выбросит исключение. Давайте убедимся в этом:
import java.math.BigDecimal;
public class Main
{
public static void main(String[] args)
{
BigDecimal num = new BigDecimal("123.456");
BigDecimal res = num.setScale(2);
System.out.println(res);
}
}
Результат выполнения кода:
Exception in thread "main" java.lang.ArithmeticException: Rounding necessary
Пример
Давайте получим масштаб числа с помощью метода scale
и изменим его на 0 с округлением вниз:
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main
{
public static void main(String[] args)
{
BigDecimal num = new BigDecimal("123.456");
System.out.println(num.scale());
BigDecimal res = num.setScale(0, RoundingMode.DOWN);
System.out.println(res);
}
}
Результат выполнения кода:
3
123
Смотрите также
-
метод
scale,
который возвращает текущий масштаб числа -
метод
precision,
который возвращает количество значащих цифр -
класс
RoundingMode,
который задает режимы округления -
метод
stripTrailingZeros,
который убирает незначащие нули в конце