C++:
Zaokrąglanie liczb

Jak to zrobić:

C++ oferuje kilka sposobów na zaokrąglenie liczb, takich jak floor(), ceil(), i round():

#include <iostream>
#include <cmath> // dla funkcji zaokrąglających

int main() {
    double num = 3.14;

    std::cout << "floor: " << std::floor(num) << "\n"; // Wyjście: floor: 3
    std::cout << "ceil: " << std::ceil(num) << "\n";   // Wyjście: ceil: 4
    std::cout << "round: " << std::round(num) << "\n"; // Wyjście: round: 3

    // Dla stałej precyzji, jak zaokrąglenie do dwóch miejsc po przecinku:
    double precise_num = 3.146;
    double multiplier = 100.0;
    double rounded = std::round(precise_num * multiplier) / multiplier;

    std::cout << "zaokrąglone do dwóch miejsc po przecinku: " << rounded << "\n"; // Wyjście: zaokrąglone do dwóch miejsc po przecinku: 3.15

    return 0;
}

Szczegółowa analiza

Przed C++11 zaokrąglanie opierało się na ręcznych technikach lub niestandardowych bibliotekach. Dzisiaj <cmath> oferuje solidne metody. floor() zaokrągla w dół, ceil() zaokrągla w górę, podczas gdy round() kieruje do najbliższej liczby całkowitej, nawet obsługując przypadki równości (0.5) poprzez zaokrąglanie do parzystej liczby.

Zrozumienie zachowania tych funkcji jest kluczowe; na przykład liczby ujemne mogą sprawić problem (std::round(-2.5) daje -2.0).

Alternatywy? Rzutowanie na typ int po dodaniu 0.5 dla liczb dodatnich było klasycznym trikiem, ale zawodzi w przypadku liczb ujemnych i nie jest niezależne od typu. Biblioteki takie jak Boost mogą oferować bardziej subtelne podejścia, a rozszerzenia języka lub wewnętrzne funkcje kompilatora mogą być zoptymalizowane pod kątem konkretnego sprzętu.

Zobacz również