Rust:
Округление чисел
Как это сделать:
Rust делает округление простым. Посмотрите на эти методы для типов f32
или f64
:
fn main() {
let num = 2.34567;
// Округление до ближайшего целого числа
let round = num.round();
println!("Round: {}", round); // Round: 2
// Пол – наибольшее целое число, меньшее или равное числу
let floor = num.floor();
println!("Floor: {}", floor); // Floor: 2
// Потолок – наименьшее целое число, большее или равное числу
let ceil = num.ceil();
println!("Ceil: {}", ceil); // Ceil: 3
// Усечение – целая часть без дробных разрядов
let trunc = num.trunc();
println!("Truncate: {}", trunc); // Truncate: 2
// Округление до ближайшего кратного степени десяти
let multiple_of_ten = (num * 100.0).round() / 100.0;
println!("Rounded to 2 decimal places: {}", multiple_of_ten); // Rounded to 2 decimal places: 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