Ce face Math.abs
Math.abs(x) returnează x dacă este pozitiv și -x dacă este negativ. Este folosit pentru distanțe, diferențe și abateri: Math.abs(a - b) este distanța dintre a și b, indiferent care e mai mare.
Există un caz-capcană: Math.abs(Integer.MIN_VALUE) returnează tot Integer.MIN_VALUE, un număr negativ, pentru că 2147483648 nu încape într-un int. Math.absExact (Java 15) aruncă în acest caz ArithmeticException, așa că eroarea nu trece neobservată.
Parametri
| Parametru | Descriere |
|---|---|
a |
Numărul. |
Ce returnează
Valoarea absolută, de același tip cu argumentul.
Exemple
Exemplul 1: Diferența de temperatură
public class Main {
public static void main(String[] args) {
int dimineata = -4;
int pranz = 7;
System.out.println("Diferența: " + Math.abs(pranz - dimineata) + " grade");
System.out.println(Math.abs(-3.75));
System.out.println(Math.abs(12));
}
}
Rezultat
Diferența: 11 grade
3.75
12
Exemplul 2: Capcana valorii minime
public class Main {
public static void main(String[] args) {
System.out.println(Math.abs(Integer.MIN_VALUE));
try {
System.out.println(Math.absExact(Integer.MIN_VALUE));
} catch (ArithmeticException e) {
System.out.println("Eroare: " + e.getMessage());
}
System.out.println(Math.absExact(-250));
}
}
Rezultat
-2147483648
Eroare: Overflow to represent absolute value of Integer.MIN_VALUE
250
Exemplul 3: Compararea a două sume cu toleranță
Două valori double se consideră egale dacă diferența absolută este foarte mică.
public class Main {
public static void main(String[] args) {
double a = 0.1 + 0.2;
double b = 0.3;
System.out.println(a == b);
System.out.println(Math.abs(a - b) < 1e-9);
}
}
Rezultat
false
true
Greșeli frecvente
- Presupui că
Math.absdă mereu un număr pozitiv: pentruInteger.MIN_VALUEșiLong.MIN_VALUErezultatul rămâne negativ. - Folosești
Math.abs(hashCode()) % npentru a alege o poziție: când hash-ul este exactMIN_VALUE, indicele iese negativ. FoloseșteMath.floorMod(hash, n).
Comenzi înrudite
Math.signum: signum() dă semnul unui număr (-1.0, 0.0 sau 1.0); copySign() pune semnul unui număr pe valoarea altuia.Math.floorDiv: Împărțire întreagă rotunjită în jos (floorDiv) sau în sus (ceilDiv), cu restul potrivit (floorMod, ceilMod).Math.addExact: Adunare, scădere, înmulțire, incrementare și negare care aruncă ArithmeticException la overflow în loc să dea rezultat greșit.Math: Clasa cu funcții matematice gata făcute: rotunjiri, puteri, radicali, trigonometrie, minim/maxim și calcule întregi sigure.