Rust:
Zaokrąglanie liczb
Jak to zrobić:
Rust sprawia, że zaokrąglanie jest bardzo proste. Sprawdź te metody dla typów f32
lub f64
:
fn main() {
let num = 2.34567;
// Zaokrąglenie do najbliższej liczby całkowitej
let round = num.round();
println!("Zaokrąglone: {}", round); // Zaokrąglone: 2
// Zaokrąglenie w dół - największa liczba całkowita mniejsza lub równa liczbie
let floor = num.floor();
println!("Podłoga: {}", floor); // Podłoga: 2
// Zaokrąglenie w górę - najmniejsza liczba całkowita większa lub równa liczbie
let ceil = num.ceil();
println!("Sufit: {}", ceil); // Sufit: 3
// Obcięcie - część całkowita bez cyfr ułamkowych
let trunc = num.trunc();
println!("Obcięte: {}", trunc); // Obcięte: 2
// Do najbliższej wielokrotności potęgi dziesięciu
let multiple_of_ten = (num * 100.0).round() / 100.0;
println!("Zaokrąglone do 2 miejsc po przecinku: {}", multiple_of_ten); // Zaokrąglone do 2 miejsc po przecinku: 2.35
}
Szczegółowa analiza
Historycznie, zaokrąglanie było kluczowe do dopasowywania nieskończonych ułamków dziesiętnych lub liczb niewymiernych w ograniczonej przestrzeni cyfrowej - konieczność dla starożytnych komputerów z ograniczoną pamięcią. Pomyśl o abakusie, ale mniej wymyślnie, bardziej matematycznie.
Alternatywy dla natywnych metod Rusta obejmują:
- Makro
format!
do formatowania ciągów znaków, które domyślnie zaokrągla. - Zewnętrzne skrzynki (crates) do specjalistycznych zadań matematycznych, takie jak skrzynka
round
z bardziej szczegółową kontrolą.
W głębi, operacje zaokrąglania w Rust spełniają standardy IEEE - żargon techniczny oznaczający “zaokrągla tak, jak chce tego twój nauczyciel matematyki”. Plus, ze względu na reprezentacje binarne, niektóre liczby nie mogą być tradycyjnie zaokrąglone, jak 0,1, z powodu ich nieskończonej reprezentacji w binarnym.
Zobacz także
- Dokumentacja Rusta o metodach typów prymitywnych: https://doc.rust-lang.org/std/primitive.f64.html
- Standard IEEE dla arytmetyki zmiennoprzecinkowej (IEEE 754): https://ieeexplore.ieee.org/document/4610935
- Skrzynka
round
do bardziej skomplikowanego zaokrąglania: https://crates.io/crates/round