Ce face f64::clamp
x.clamp(min, max) este o scriere scurtă pentru x.max(min).min(max): dacă x este în interval, rămâne la fel; dacă iese, este adus la capătul cel mai apropiat. Este util pentru volume, procente, coordonate pe ecran, note.
Dacă min > max sau oricare dintre limite este NaN, metoda intră în panică. Dacă x este NaN, rezultatul este NaN. Întregii au aceeași metodă, clamp, prin trait-ul Ord.
Parametri
| Parametru | Descriere |
|---|---|
min |
Limita de jos. |
max |
Limita de sus; trebuie să fie cel puțin cât min. |
Ce returnează
f64.
Exemple
Exemplul 1: Volum între 0 și 100
fn main() {
let mut volum = 80.0_f64;
for schimbare in [15.0, 10.0, -50.0, -70.0] {
volum = (volum + schimbare).clamp(0.0, 100.0);
println!("{schimbare:+} -> volum {volum}");
}
println!("NaN.clamp: {}", f64::NAN.clamp(0.0, 1.0));
println!("pentru întregi: {}", 15_i32.clamp(1, 10));
}
Rezultat
+15 -> volum 95
+10 -> volum 100
-50 -> volum 50
-70 -> volum 0
NaN.clamp: NaN
pentru întregi: 10
Exemplul 2: Bară de progres
Raportul poate ieși din intervalul 0..1 dacă datele sunt greșite; clamp ține bara în limite.
fn bara(facut: f64, total: f64) -> String {
let p = (facut / total).clamp(0.0, 1.0);
let pline = (p * 20.0).round() as usize;
format!("[{}{}] {:>3.0}%", "#".repeat(pline), "-".repeat(20 - pline), p * 100.0)
}
fn main() {
println!("{}", bara(3.0, 12.0));
println!("{}", bara(9.0, 12.0));
println!("{}", bara(15.0, 12.0));
println!("{}", bara(-2.0, 12.0));
}
Rezultat
[#####---------------] 25%
[###############-----] 75%
[####################] 100%
[--------------------] 0%
Greșeli frecvente
- Inversezi limitele:
x.clamp(100.0, 0.0)intră în panică (min > max). - Folosești
clampca să ascunzi date greșite: dacă o valoare în afara intervalului este o eroare, semnaleaz-o.
Comenzi înrudite
f64::min: min returnează cel mai mic dintre două numere, max cel mai mare; dacă unul este NaN, îl ignoră.i32::saturating_sub: Scade, dar se oprește la limita tipului în loc să depășească: i32::MIN.saturating_sub(1) rămâne i32::MIN.f64::round: Rotunjiri: round la cel mai apropiat întreg, floor în jos, ceil în sus, trunc tăie zecimalele.