Ce face i32::abs
x.abs() returnează distanța față de zero: (-5).abs() == 5. Există o singură excepție: i32::MIN.abs() nu încape în i32 (ar fi 2147483648), deci în debug intră în panică. unsigned_abs() returnează un u32 și merge pentru orice valoare; checked_abs() dă None pentru MIN.
x.signum() returnează -1 pentru numere negative, 0 pentru zero și 1 pentru numere pozitive. Este util pentru a afla direcția unei schimbări.
Ce returnează
abs și signum: i32. unsigned_abs: u32.
Exemple
Exemplul 1: Diferența de temperatură
fn main() {
let temperaturi: [(&str, i32); 4] = [("Iași", -3), ("Cluj", 2), ("Constanța", 7), ("Brașov", -8)];
for (oras, t) in temperaturi {
let directie = match t.signum() {
-1 => "sub zero",
0 => "exact zero",
_ => "peste zero",
};
println!("{oras}: {} grade {directie}", t.abs());
}
let dif = (temperaturi[2].1 - temperaturi[3].1).abs();
println!("diferența Constanța-Brașov: {dif} grade");
}
Rezultat
Iași: 3 grade sub zero
Cluj: 2 grade peste zero
Constanța: 7 grade peste zero
Brașov: 8 grade sub zero
diferența Constanța-Brașov: 15 grade
Exemplul 2: Cazul i32::MIN
fn main() {
println!("MIN = {}", i32::MIN);
println!("checked_abs: {:?}", i32::MIN.checked_abs());
println!("unsigned_abs: {}", i32::MIN.unsigned_abs());
println!("wrapping_abs: {}", i32::MIN.wrapping_abs());
println!("signum(0) = {}", 0_i32.signum());
}
Rezultat
MIN = -2147483648
checked_abs: None
unsigned_abs: 2147483648
wrapping_abs: -2147483648
signum(0) = 0
Greșeli frecvente
- Aplici
abs()pei32::MIN(de exemplu un rezultat venit din calcule): panică în debug. Foloseșteunsigned_abs(). - Scrii
(a - b).abs()cuașibde tipu32: tipurile fără semn nu auabs, iar scăderea poate da depășire. Foloseștea.abs_diff(b).
Comenzi înrudite
f64::abs: Valoarea absolută a unui număr zecimal: elimină semnul minus.i32::rem_euclid: Restul împărțirii care este mereu pozitiv (sau zero), spre deosebire de %, care păstrează semnul.i32: Tipul implicit pentru numere întregi cu semn, pe 32 de biți: de la -2147483648 la 2147483647.