Rust:
Округлення чисел
Як це зробити:
В Rust округлення - це легко. Ознайомтесь з цими методами для типів f32
або f64
:
fn main() {
let num = 2.34567;
// Округлення до найближчого цілого числа
let round = num.round();
println!("Округлення: {}", round); // Округлення: 2
// Floor - найбільше ціле менше або рівне числу
let floor = num.floor();
println!("Floor: {}", floor); // Floor: 2
// Ceil - найменше ціле більше або рівне числу
let ceil = num.ceil();
println!("Ceil: {}", ceil); // Ceil: 3
// Truncate - цілковита частина без дробових цифр
let trunc = num.trunc();
println!("Truncate: {}", trunc); // Truncate: 2
// До найближчого кратного ступеня десятка
let multiple_of_ten = (num * 100.0).round() / 100.0;
println!("Округлено до 2 десяткових місць: {}", multiple_of_ten); // Округлено до 2 десяткових місць: 2.35
}
Поглиблений вступ
Історично, округлення було критично важливим для адаптування нескінченних десяткових або ірраціональних чисел у обмежені цифрові простори—це мастхев для стародавніх комп’ютерів із обмеженою пам’яттю. Уявіть абак, але менш майстерно, більше математики.
Альтернативи нативним методам Rust включають:
- Макрос
format!
для форматування рядків, який за замовчуванням округляє. - Зовнішні крейти для спеціалізованих математичних завдань, як от крейт
round
з більш дробовим контролем.
Під капотом, операції округлення в Rust відповідають стандартам IEEE—технічний жаргон для “округляє так, як хоче ваш вчитель математики”. До того ж, через двійкове представлення, деякі числа не можуть бути традиційно округлені, як 0.1, через їх нескінченне представлення в двійковому коді.
Див. також
- Документація Rust про методи примітивних типів: https://doc.rust-lang.org/std/primitive.f64.html
- Стандарт IEEE для арифметики з плаваючою точкою (IEEE 754): https://ieeexplore.ieee.org/document/4610935
- Крейт “round” для більш складного округлення: https://crates.io/crates/round