Класс RoundingMode
Класс RoundingMode - это перечисление
(enum), которое определяет способы округления
чисел в классе BigDecimal. Оно приходит
на смену устаревшим константам BigDecimal.ROUND_*
и используется в методах setScale и
divide, когда необходимо задать правило
отбрасывания лишних разрядов. Перечисление
содержит восемь констант, каждая из которых
описывает свой алгоритм округления.
Синтаксис
RoundingMode.UP
RoundingMode.DOWN
RoundingMode.CEILING
RoundingMode.FLOOR
RoundingMode.HALF_UP
RoundingMode.HALF_DOWN
RoundingMode.HALF_EVEN
RoundingMode.UNNECESSARY
Константы UP и DOWN округляют
в сторону от нуля и к нулю соответственно.
CEILING округляет в сторону
положительной бесконечности, FLOOR -
в сторону отрицательной. Константы
HALF_UP, HALF_DOWN и
HALF_EVEN работают с половиной
разряда, а UNNECESSARY выбрасывает
исключение, если округление требуется.
Пример
Давайте округлим число 12345 до
двух знаков после запятой разными способами:
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main
{
public static void main(String[] args)
{
BigDecimal num = new BigDecimal("123.456");
BigDecimal up = num.setScale(2, RoundingMode.UP);
BigDecimal down = num.setScale(2, RoundingMode.DOWN);
BigDecimal halfUp = num.setScale(2, RoundingMode.HALF_UP);
BigDecimal halfEven = num.setScale(2, RoundingMode.HALF_EVEN);
System.out.println("UP: " + up);
System.out.println("DOWN: " + down);
System.out.println("HALF_UP: " + halfUp);
System.out.println("HALF_EVEN: " + halfEven);
}
}
Результат выполнения кода:
"UP: 123.46"
"DOWN: 123.45"
"HALF_UP: 123.46"
"HALF_EVEN: 123.46"
Пример
Давайте посмотрим, как работает
RoundingMode.UNNECESSARY, когда
округление не требуется:
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main
{
public static void main(String[] args)
{
BigDecimal num = new BigDecimal("123.45");
try
{
BigDecimal res = num.setScale(2, RoundingMode.UNNECESSARY);
System.out.println(res);
}
catch (ArithmeticException e)
{
System.out.println("Rounding necessary");
}
}
}
Результат выполнения кода:
"123.45"
Пример
Давайте разделим одно число на другое,
указав режим округления HALF_DOWN:
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main
{
public static void main(String[] args)
{
BigDecimal a = new BigDecimal("10");
BigDecimal b = new BigDecimal("3");
BigDecimal res = a.divide(b, 4, RoundingMode.HALF_DOWN);
System.out.println(res);
}
}
Результат выполнения кода:
"3.3333"
Смотрите также
-
класс
BigDecimal,
который представляет десятичные числа -
метод
setScale,
который задаёт масштаб числа -
метод
divide,
который делит одно число на другое -
метод
valueOf,
который создаёт BigDecimal из примитивов