Ce face BigDecimal.compareTo
a.compareTo(b) returnează un număr negativ dacă a < b, 0 dacă sunt egale ca valoare și un număr pozitiv dacă a > b. Pentru comparații scrii a.compareTo(b) > 0, a.compareTo(b) == 0 etc.
Atenție la equals: la BigDecimal compară și valoarea, și scala. new BigDecimal("2.0").equals(new BigDecimal("2.00")) este false, deși numerele sunt egale. Pentru egalitatea valorilor folosește mereu compareTo(...) == 0.
signum() dă −1, 0 sau 1 după semn; max și min returnează numărul mai mare sau mai mic.
Parametri
| Parametru | Descriere |
|---|---|
alt |
Numărul cu care se compară. |
Ce returnează
Un int: negativ, 0 sau pozitiv.
Exemple
Exemplul 1: equals față de 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("equals: " + a.equals(b));
System.out.println("compareTo: " + a.compareTo(b));
System.out.println("Egale ca valoare: " + (a.compareTo(b) == 0));
}
}
Rezultat
equals: false
compareTo: 0
Egale ca valoare: true
Exemplul 2: Are clientul destui bani?
import java.math.BigDecimal;
public class Main {
static String plata(BigDecimal sold, BigDecimal pret) {
int c = sold.compareTo(pret);
if (c > 0) return "plată reușită, rest " + sold.subtract(pret);
if (c == 0) return "plată reușită, soldul ajunge la zero";
return "fonduri insuficiente, lipsesc " + pret.subtract(sold);
}
public static void main(String[] args) {
BigDecimal pret = new BigDecimal("149.99");
System.out.println("Ana: " + plata(new BigDecimal("200.00"), pret));
System.out.println("Mihai: " + plata(new BigDecimal("149.990"), pret));
System.out.println("Ioana: " + plata(new BigDecimal("120.50"), pret));
}
}
Rezultat
Ana: plată reușită, rest 50.01
Mihai: plată reușită, soldul ajunge la zero
Ioana: fonduri insuficiente, lipsesc 29.49
Exemplul 3: Cel mai mare preț, semnul și sortarea
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<BigDecimal> preturi = new ArrayList<>(List.of(
new BigDecimal("19.99"), new BigDecimal("5.5"), new BigDecimal("120"), new BigDecimal("-3.00")));
System.out.println("Maxim: " + Collections.max(preturi));
System.out.println("max(5.5, 19.99): " + preturi.get(1).max(preturi.get(0)));
System.out.println("Semnul lui -3.00: " + preturi.get(3).signum());
Collections.sort(preturi);
System.out.println("Sortate: " + preturi);
}
}
Rezultat
Maxim: 120
max(5.5, 19.99): 19.99
Semnul lui -3.00: -1
Sortate: [-3.00, 5.5, 19.99, 120]
Greșeli frecvente
- Verifici egalitatea cu
equals.2.0și2.00par diferite; foloseștecompareTo(...) == 0. - Pui
BigDecimalîntr-unHashSetși te aștepți ca2.0și2.00să fie una.HashSetfoloseșteequals; foloseșteTreeSetsaustripTrailingZeros().
Comenzi înrudite
BigDecimal: Număr zecimal exact, fără erori de rotunjire ca la double; se folosește pentru bani, prețuri și calcule financiare.BigDecimal.setScale: Rotunjește (sau completează cu zerouri) un BigDecimal la un număr fix de zecimale: setScale(2, RoundingMode.HALF_UP).