0Pricing
Java Academy · Lekcja

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, subtract i multiply należy używać bezpośrednio
  • Metoda divide wymaga skali i RoundingMode dla wyników z nieskończonym rozwinięciem
  • Należy porównywać wartości za pomocą compareTo, a nie equals

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

  1. Dlaczego nie używać double do pieniędzy
  2. Praca z BigDecimal
  3. Zaokrąglanie i skala
  4. BigInteger dla ogromnych liczb
← Powrót do Java Academy