Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: floating point, precision, bigdecimal

Почему использование double для финансовых расчётов может быть проблемой? Чем заменить?

Вопрос проверяет знание проблем точности при работе с числами с плавающей запятой и альтернатив для финансовых операций.

Короткий ответ

Тип double может приводить к ошибкам округления из-за двоичного представления дробных чисел. Для финансовых расчётов используйте BigDecimal, который обеспечивает точную арифметику.

Длинный ответ

Проблема с double возникает из-за того, что десятичные дроби (например, 0.1) не могут быть точно представлены в двоичной системе.

Пример ошибки:

double a = 0.1;
double b = 0.2;
System.out.println(a + b); // 0.30000000000000004 (не 0.3!)

Решение:
Используйте BigDecimal:

  1. Точность: Хранит числа в десятичном формате без потерь.

  2. Контроль округления: Позволяет задавать правила округления.

Пример:

BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
BigDecimal sum = a.add(b); // 0.3 (точно)

Когда использовать:

  • Всегда для денежных расчётов.

  • Для любых операций, где важна точность.

Уровень

  • Рейтинг:

    1

  • Сложность:

    6

Навыки

  • Java

    Java

Ключевые слова

#floating point

#precision

#bigdecimal

Подпишись на Java Developer в телеграм