Numere mari: BigInteger și BigDecimal
Tipurile de date numerice primitive încorporate nu sunt întotdeauna potrivite pentru anumite programe. De exemplu, este necesar să stocăm și să utilizăm în program numere foarte mari, care depășesc valorile maxime admise pentru tipurile long și double.
În acest caz, pentru a lucra cu date numerice, putem folosi două tipuri suplimentare din pachetul java.math - BigInteger (pentru date întregi) și BigDecimal (pentru numere în virgulă mobilă).
Metodele principale ale clasei BigInteger:
- BigInteger add(BigInteger other): returnează suma a două numere
- BigInteger subtract(BigInteger other): returnează diferența a două numere
- BigInteger multiply(BigInteger other): returnează produsul a două numere
- BigInteger divide(BigInteger other): returnează câtul a două numere
- BigInteger mod(BigInteger other): returnează restul împărțirii întregi a douănumere
- BigInteger sqrt(): returnează rădăcina pătrată a numărului
- int compareTo(BigInteger other): compară două numere. Returnează -1 dacă obiectul curent este mai mic decât other, 1 dacă este mai mare și 0 dacă numerele sunt egale
- static BigInteger valueOf(long x): returnează un obiect BigInteger, a cărui valoare este egală cu numărul primit ca parametru
- int intValue(): convertește obiectul BigInteger într-un obiect de tip int
- byte byteValue(): convertește obiectul BigInteger în byte
- short shortValue(): convertește obiectul BigInteger în short
- long longValue(): convertește obiectul BigInteger în long
Metodele principale ale clasei BigDecimal:
- BigDecimal add(BigDecimal other): returnează suma a două numere
- BigDecimal subtract(BigDecimal other): returnează diferența a două numere
- BigDecimal multiply(BigDecimal other): returnează produsul a două numere
- BigDecimal divide(BigDecimal other): returnează câtul a două numere
- BigDecimal divide(BigDecimal other, RoundingMode mode): returnează rezultatul împărțirii a două numere, rotunjit conform modului mode
- int compareTo(BigDecimal other): compară două numere. Returnează -1 dacă obiectul curent este mai mic decât other, 1 dacă este mai mare și 0 dacă numerele sunt egale
- static BigDecimal valueOf(double x): returnează un obiect BigDecimal, a cărui valoare este egală cu numărul primit ca parametru
- double doubleValue(): convertește obiectul BigDecimal în double
- float floatValue(): convertește obiectul BigDecimal în float
Exemplu de utilizare a claselor BigInteger și BigDecimal:
import java.math.*;
public class Program {
public static void main(String[] args) {
BigInteger a = BigInteger.valueOf(2147483647);
BigInteger b = BigInteger.valueOf(2147483641);
//a = a * b; // așa nu se poate
a = a.multiply(b);
System.out.println(a); // 4611686001247518727
long x = a.longValue();
System.out.println(x); // 4611686001247518727
BigDecimal c = BigDecimal.valueOf(2325.06);
BigDecimal d = BigDecimal.valueOf(215.06);
c = c.subtract(d.multiply(BigDecimal.valueOf(2.1)));
System.out.println(c); // 1873.434
double y = c.doubleValue();
System.out.println(y); // 1873.434
}
}
Este important de menționat că, deși obiectele BigInteger și BigDecimal reprezintă numere, nu putem aplica asupra lor operațiunile aritmetice standard. Toate operațiunile matematice cu aceste obiecte se efectuează prin metodele lor.