f64::round în Rust

Numere zecimale: f64 Rust 1.0 (round_ties_even: 1.77)

Rotunjiri: round la cel mai apropiat întreg, floor în jos, ceil în sus, trunc tăie zecimalele.

Sintaxă
fn round(self) -> f64
fn floor(self) -> f64
fn ceil(self) -> f64
fn trunc(self) -> f64

Ce face f64::round

round() rotunjește la cel mai apropiat întreg; la jumătate (.5) se îndepărtează de zero: 2.5 → 3, -2.5 → -3. round_ties_even() rotunjește jumătățile la numărul par (2.5 → 2), metoda folosită în statistică și contabilitate.

floor() dă cel mai mare întreg mai mic sau egal (în jos, spre minus infinit), ceil() cel mai mic întreg mai mare sau egal (în sus), iar trunc() tăie zecimalele (spre zero). Diferențele apar la numerele negative: (-2.7).floor() == -3, dar (-2.7).trunc() == -2.

Toate returnează tot f64. Pentru un întreg, convertește după: x.round() as i64. Pentru rotunjire la zecimale, înmulțește, rotunjește și împarte ((x * 100.0).round() / 100.0) sau folosește doar formatarea {:.2} la afișare.

Ce returnează

f64.

Exemple

Exemplul 1: Tabel de rotunjiri

fn main() {
    println!("{:>6} {:>6} {:>6} {:>6} {:>6} {:>6}", "x", "round", "floor", "ceil", "trunc", "even");
    for x in [2.4_f64, 2.5, 2.7, 3.5, -2.5, -2.7] {
        println!(
            "{x:>6} {:>6} {:>6} {:>6} {:>6} {:>6}",
            x.round(),
            x.floor(),
            x.ceil(),
            x.trunc(),
            x.round_ties_even()
        );
    }
}

Rezultat

     x  round  floor   ceil  trunc   even
   2.4      2      2      3      2      2
   2.5      3      2      3      2      2
   2.7      3      2      3      2      3
   3.5      4      3      4      3      4
  -2.5     -3     -3     -2     -2     -2
  -2.7     -3     -3     -2     -2     -3

Exemplul 2: Calcule practice

Câte autobuze trebuie (în sus), câte cutii pline (în jos) și prețul rotunjit la bani.

fn main() {
    let elevi = 130.0_f64;
    println!("autobuze de 50 de locuri: {}", (elevi / 50.0).ceil());
    println!("cutii pline de 12 ouă din 100: {}", (100.0_f64 / 12.0).floor());

    let pret = 19.99_f64 * 1.19;
    println!("preț cu TVA: {pret}");
    println!("rotunjit la bani: {}", (pret * 100.0).round() / 100.0);
    println!("doar la afișare: {pret:.2}");
    println!("note: {} {}", 9.5_f64.round() as i32, 4.49_f64.round() as i32);
}

Rezultat

autobuze de 50 de locuri: 3
cutii pline de 12 ouă din 100: 8
preț cu TVA: 23.788099999999996
rotunjit la bani: 23.79
doar la afișare: 23.79
note: 10 4

Greșeli frecvente

  • Folosești trunc() sau as i32 când voiai rotunjire: 2.9 as i32 == 2.
  • Te aștepți ca round() să rotunjească jumătățile la par, ca în unele limbaje: Rust îndepărtează de zero. Pentru par, folosește round_ties_even().
  • Rotunjești la 2 zecimale și apoi afișezi cu {}: unele valori nu au reprezentare exactă. Pentru afișare, {:.2} este mai sigur.

Comenzi înrudite

  • f64: Tipul implicit pentru numere cu zecimale: virgulă mobilă pe 64 de biți (precizie dublă, IEEE 754).
  • f64::abs: Valoarea absolută a unui număr zecimal: elimină semnul minus.
  • f64::clamp: Limitează valoarea la un interval: sub min devine min, peste max devine max, altfel rămâne neschimbată.