Округление чисел

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 включают:

  1. Макрос format! для форматирования строк, который по умолчанию округляет.
  2. Внешние крейты для специализированных математических задач, такие как крейт round с более детальным контролем.

Под капотом, операции округления в Rust соответствуют стандартам IEEE – технический жаргон для “округляет так, как хочет ваш учитель математики”. Кроме того, из-за двоичного представления, некоторые числа, такие как 0.1, не могут быть традиционно округлены из-за их бесконечного представления в двоичной форме.

Смотрите также