На первый взгляд кажется, что цена это обычное число:
double price = 0.1;
double total = price + price + price;
System.out.println(total);
Но результат может удивить:
0.30000000000000004
Причина в том, что double хранит числа в бинарном формате, и многие десятичные дроби не представляются точно.
Для денег, налогов, скидок и балансов лучше использовать BigDecimal:
BigDecimal price = new BigDecimal("0.10");
BigDecimal total = price
.add(price)
.add(price);Важно создавать BigDecimal из строки, а не из double:
new BigDecimal("0.10")А вот так лучше не делать:
new BigDecimal(0.10)
При делении обязательно указывай округление:
amount.divide(count, 2, RoundingMode.HALF_UP);
Так код становится предсказуемым, а расчёты не ломаются из-за погрешностей.
👉 Java Ready | #совет
