Praca z BigDecimal
Dokładna arytmetyka dziesiętna
Praca z BigDecimal to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Java Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Java Academy zawiera 4 lekcji w sumie.
Dokładne działania dziesiętne
BigDecimal z pakietu java.math reprezentuje liczby dziesiętne z dowolną precyzją i bez ukrytych błędów zaokrągleń. Jest standardowym narzędziem do obliczeń finansowych.
Tworzenie BigDecimal
Najbezpieczniej jest utworzyć obiekt BigDecimal z tekstu. Pozwala to zachować dokładnie wpisane cyfry.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal amount = new BigDecimal("42.50");
System.out.println(amount);
}
}Niezmienność
BigDecimal jest niezmienny. Operacje takie jak add nie zmieniają oryginalnego obiektu, lecz zwracają nowy obiekt BigDecimal. Należy zapisać zwróconą wartość.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal a = new BigDecimal("10");
a.add(new BigDecimal("5"));
System.out.println(a);
}
}Dodawanie i odejmowanie
Należy używać metod add i subtract, pamiętając o zapisaniu wyniku. Każde wywołanie zwraca nową wartość.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal price = new BigDecimal("19.99");
BigDecimal tax = new BigDecimal("1.60");
BigDecimal total = price.add(tax);
System.out.println(total);
}
}Mnożenie
Metoda multiply działa zgodnie z oczekiwaniami. Należy pamiętać, że skala wyniku jest sumą skal jego operandów.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal unit = new BigDecimal("2.50");
BigDecimal qty = new BigDecimal("3");
System.out.println(unit.multiply(qty));
}
}Dzielenie wymaga uwagi
Dzielenie wartości, których nie można podzielić bez reszty, np. 1 przez 3, daje nieskończone rozwinięcie dziesiętne. Zwykłe divide powoduje wtedy wyjątek ArithmeticException.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal one = new BigDecimal("1");
BigDecimal three = new BigDecimal("3");
try {
System.out.println(one.divide(three));
} catch (ArithmeticException e) {
System.out.println("Need to specify rounding!");
}
}
}Dzielenie z zaokrąglaniem
Aby bezpiecznie dzielić, należy podać skalę i RoundingMode. W tym przypadku zachowywane są dwa miejsca dziesiętne, a zaokrąglanie odbywa się w górę od połowy.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal one = new BigDecimal("1");
BigDecimal three = new BigDecimal("3");
System.out.println(one.divide(three, 2, RoundingMode.HALF_UP));
}
}Porównywanie wartości
Do porównywania wartości liczbowych należy używać compareTo. Nie należy używać equals, ponieważ equals uwzględnia skalę: 2.0 i 2.00 nie są równe według equals, ale są równe według compareTo.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal a = new BigDecimal("2.0");
BigDecimal b = new BigDecimal("2.00");
System.out.println(a.equals(b));
System.out.println(a.compareTo(b) == 0);
}
}Przydatne stałe
BigDecimal udostępnia gotowe stałe: BigDecimal.ZERO, BigDecimal.ONE i BigDecimal.TEN. Należy używać ich zamiast tworzyć własne.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal sum = BigDecimal.ZERO;
sum = sum.add(BigDecimal.TEN);
System.out.println(sum);
}
}Sumowanie listy
Typowy wzorzec polega na rozpoczęciu od BigDecimal.ZERO i dodawaniu każdej wartości w pętli, za każdym razem zapisując wynik.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal[] prices = {
new BigDecimal("1.10"),
new BigDecimal("2.20"),
new BigDecimal("3.30")
};
BigDecimal total = BigDecimal.ZERO;
for (BigDecimal p : prices) {
total = total.add(p);
}
System.out.println(total);
}
}Najlepsze praktyki
Należy pamiętać o podstawowych zasadach: tworzyć obiekty z tekstów, traktować wartości jako niezmienne, zawsze określać sposób zaokrąglania podczas dzielenia oraz porównywać wartości za pomocą compareTo.
Szybki test
Sprawdź swoją znajomość BigDecimal.
Podsumowanie
Poznałeś(-aś) sposób pracy z BigDecimal:
- Należy tworzyć go z tekstu, aby zachować dokładne cyfry
- Jest niezmienny, dlatego należy zapisywać wynik każdej operacji
- Metod
add,subtractimultiplynależy używać bezpośrednio - Metoda
dividewymaga skali iRoundingModedla wyników z nieskończonym rozwinięciem - Należy porównywać wartości za pomocą
compareTo, a nieequals
Często zadawane pytania
Czy lekcja „Praca z BigDecimal” jest bezpłatna?
Tak — pełny tekst „Praca z BigDecimal” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Java Academy, przejdź na CoddyKit PRO. Kurs Java Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Praca z BigDecimal”?
Dokładna arytmetyka dziesiętna Ćwiczysz Java Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Java Academy?
Nie wymagamy żadnego doświadczenia. Java Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Praca z BigDecimal”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Java Academy?
Tak. Każda lekcja Java Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Dlaczego nie używać double do pieniędzy
- Praca z BigDecimal
- Zaokrąglanie i skala
- BigInteger dla ogromnych liczb