Вопрос проверяет знание проблем точности при работе с числами с плавающей запятой и альтернатив для финансовых операций.
Тип double может приводить к ошибкам округления из-за двоичного представления дробных чисел. Для финансовых расчётов используйте BigDecimal, который обеспечивает точную арифметику.
Проблема с double возникает из-за того, что десятичные дроби (например, 0.1) не могут быть точно представлены в двоичной системе.
Пример ошибки:
double a = 0.1;
double b = 0.2;
System.out.println(a + b); // 0.30000000000000004 (не 0.3!)Решение:
Используйте BigDecimal:
Точность: Хранит числа в десятичном формате без потерь.
Контроль округления: Позволяет задавать правила округления.
Пример:
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
BigDecimal sum = a.add(b); // 0.3 (точно)Когда использовать:
Всегда для денежных расчётов.
Для любых операций, где важна точность.