Sobes.tech
Junior — Middle

Czym różnią się klasy BigDecimal i Double w Java i w jakich przypadkach lepiej jest używać każdej z nich?

sobes.tech AI

Odpowiedź od AI

Klasa Double w Javie reprezentuje prymitywny typ zmiennej zmiennoprzecinkowej podwójnej precyzji (64 bity). Jest wygodna do szybkiego wykonywania operacji arytmetycznych na liczbach zmiennoprzecinkowych, ale ze względu na cechy reprezentacji binarnej, nie zawsze dokładnie przechowuje liczby dziesiętne, co może prowadzić do błędów zaokrągleń.

BigDecimal to klasa do pracy z liczbami dziesiętnymi o dowolnej precyzji. Przechowuje liczby w formie ciągu znaków lub tablicy cyfr, co pozwala uniknąć błędów zaokrągleń i zapewnia dokładność przy obliczeniach finansowych i innych krytycznych.

Kiedy używać:

  • Używaj Double, gdy ważna jest szybkość i dopuszczalne są niewielkie błędy (np. w obliczeniach naukowych, grafice).
  • Używaj BigDecimal do obliczeń finansowych, gdzie ważna jest precyzja i poprawne zaokrąglenie (np. przy pracy z pieniędzmi).

Przykład z BigDecimal:

import java.math.BigDecimal;

BigDecimal price = new BigDecimal("19.99");
BigDecimal quantity = new BigDecimal("3");
BigDecimal total = price.multiply(quantity);
System.out.println("Razem: " + total); // Razem: 59.97

Przykład z Double:

double price = 19.99;
double quantity = 3;
double total = price * quantity;
System.out.println("Razem: " + total); // Może być 59.96999999999999