Java for Beginner
695 subscribers
604 photos
165 videos
12 files
938 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Класс BigDecimal в Java

Класс BigDecimal в Java используется для выполнения точных арифметических операций с числами с плавающей точкой. В отличие от примитивных типов double и float, которые могут терять точность из-за особенностей двоичного представления, BigDecimal обеспечивает полный контроль над точностью и округлением. Это делает его идеальным выбором для финансовых расчетов, где важна каждая копейка.

Внутреннее устройство


BigDecimal хранит число в виде двух компонентов:
Мантисса (unscaled value): Целое число типа BigInteger, представляющее значимые цифры числа.
Масштаб (scale): Целое число, указывающее количество цифр после десятичной точки.


Пример:
BigDecimal decimal = new BigDecimal("123.456");


Здесь:
Мантисса: 123456
Масштаб: 3 (три цифры после точки).


Основные методы класса BigDecimal

Конструкторы:
BigDecimal(String val) — создает объект BigDecimal из строки.
BigDecimal(double val) — создает объект BigDecimal из числа double (не рекомендуется из-за потери точности).
BigDecimal(BigInteger val) — создает объект BigDecimal из BigInteger.

Пример:
BigDecimal a = new BigDecimal("123.456");
BigDecimal b = new BigDecimal(123.456); // Не рекомендуется


Арифметические операции:
add(BigDecimal val) — сложение.
subtract(
BigDecimal val) — вычитание.
multiply(
BigDecimal val) — умножение.
divide(
BigDecimal val) — деление.
remainder(
BigDecimal val) — остаток от деления.

Пример:
BigDecimal a = new BigDecimal("100.50");
BigDecimal b = new BigDecimal("20.25");
BigDecimal sum = a.add(b); // 120.75


Округление:
setScale(int newScale, RoundingMode roundingMode) — устанавливает новый масштаб (количество знаков после точки) и применяет указанный режим округления.
RoundingMode — перечисление, определяющее стратегию округления (например, RoundingMode.HALF_UP для округления до ближайшего числа).


Пример:
BigDecimal a = new BigDecimal("123.456789");
BigDecimal rounded = a.setScale(2, RoundingMode.HALF_UP); // 123.46


Сравнение:
compareTo(BigDecimal val) — сравнивает два числа. Возвращает -1, 0 или 1, если текущее число меньше, равно или больше переданного.
equals(Object x) — проверяет равенство двух объектов
BigDecimal (учитывает масштаб).

Пример:
BigDecimal a = new BigDecimal("100.00");
BigDecimal b = new BigDecimal("100.0");
boolean isEqual = a.equals(b); // false, так как масштабы разные
int comparison = a.compareTo(b); // 0, так как числовые значения равны


Другие полезные методы:
abs() — возвращает абсолютное значение.
pow(int n) — возведение в степень.
stripTrailingZeros() — удаляет незначащие нули после точки.


Пример:
BigDecimal a = new BigDecimal("123.4500");
BigDecimal stripped = a.stripTrailingZeros(); // 123.45


Плюсы и минусы
BigDecimal

Плюсы:
Высокая точность вычислений.
Полный контроль над округлением.
Подходит для финансовых расчетов.


Минусы:
Медленнее, чем примитивные типы (double, float).
Требует больше памяти.


Пример использования
import java.math.BigDecimal;
import java.math.RoundingMode;

public class BigDecimalExample {
public static void main(String[] args) {
BigDecimal a = new BigDecimal("100.50");
BigDecimal b = new BigDecimal("20.25");

BigDecimal sum = a.add(b);
BigDecimal product = a.multiply(b);
BigDecimal rounded = product.setScale(2, RoundingMode.HALF_UP);

System.out.println("Сумма: " + sum);
System.out.println("Произведение: " + product);
System.out.println("Округленное произведение: " + rounded);
}
}


#Java #Training #Medium #BigDecimal
👍1