Wielkie liczby - BigInteger, BigDecimal

 

Jeśli typ double nie wystarczy do wykonania obliczeń, ponieważ wymagana będzie wyjątkowa precyzja lub będziesz używać wielkich wartości liczbowych - np. w bankowości, skorzystasz chętnie ze specjalnych klas zapewniających możliwość operowania na praktycznie nieograniczonych wartościach. W klasach tych dostępne są dodatkowe, specjalne funkcje matematyczne.

  • BigInteger - klasa dla wielkich liczb całkowitych
  • BigDecimal - klasa dla wielkich liczb zmiennoprzecinkowych

 

Najbardziej powszechną metodą tworzenia wartości typu/klasy BigInteger i BigDecimal jest użycie wartości liczbowych zapisanych w formie łańcucha znaków.

BigInteger wielkaLiczba = new BigInteger("1231231231231231231234212345566778908364");

Na wartościach typu/klasy BigInteger i BigDecimal nie możemy operować przy użyciu zwykłych operatorów. Wszystkie operacje matematyczne musimy wykonywać przy użycu specjalnych metod. Wynik wyświetlamy, przekształcając wartość typu BigInteger lub BigDecimal na łańcuch znaków.

BigInteger a = new BigInteger("123123123123123123123123123123");
BigInteger b = new BigInteger("987654321987654321987654321987");
BigInteger suma = a.add(b);
System.out.println( "Suma: " + suma.toString() );

 

Przykład - mnożenie dwóch liczb zmiennoprzecinkowych o wielkiej liczbie cyfr:

Aby możliwe było użycie klas BigInteger oraz/lub BigDecimal, konieczne jest zaimportowanie tych klas z biblioteki java.math.

import java.math.*;

class BigDecimalProgram {
	public static void main( String... args ) {
		BigDecimal a = new BigDecimal("12345678901234567890.12345678901234567890");
		BigDecimal b = new BigDecimal("22345678901234567890.22345678901234567890");

		BigDecimal wynik = a.multiply( b );
		System.out.println( "Wynik: " + wynik );
	}
}

 

Informacje o przydatnych metodach klasy BigInteger oraz BigDecimal znajdziesz w dokumentacji firmy Oracle. Np. wpisz w Google następujące zapytanie: "biginteger java 8".