std::round în C++

Rotunjește la cel mai apropiat întreg; la jumătate (x,5) rotunjește în direcția opusă lui zero.

Sintaxă
double round(double x);
long lround(double x);
long long llround(double x);

Ce face std::round

std::round(x) returnează întregul cel mai apropiat de x, ca double. Când x este exact la jumătate, rotunjește departe de zero: round(2.5) = 3, round(-2.5) = -3.

std::lround și std::llround fac aceeași rotunjire, dar returnează direct un întreg (long / long long). Pentru afișare cu un număr fix de zecimale nu ai nevoie de round: std::println("{:.2f}", x) rotunjește singur.

Parametri

Parametru Descriere
x Numărul rotunjit.

Ce returnează

round: double. lround: long. llround: long long.

Exemple

Exemplul 1: Rotunjiri la întreg

#include <cmath>
#include <print>

int main() {
    for (double x : {2.4, 2.5, 2.6, -2.5, -2.4}) {
        std::println("round({}) = {}", x, std::round(x));
    }
    long nota = std::lround(8.5);
    std::println("Nota pe catalog: {}", nota);
}

Rezultat

round(2.4) = 2
round(2.5) = 3
round(2.6) = 3
round(-2.5) = -3
round(-2.4) = -2
Nota pe catalog: 9

Exemplul 2: Rotunjire la 2 zecimale

Înmulțești cu 100, rotunjești, împarți la 100. Pentru afișare simplă, formatul {:.2f} este suficient.

#include <cmath>
#include <print>

int main() {
    double pret = 19.987;
    double rotunjit = std::round(pret * 100) / 100;

    std::println("Rotunjit: {}", rotunjit);
    std::println("Doar la afișare: {:.2f}", pret);
}

Rezultat

Rotunjit: 19.99
Doar la afișare: 19.99

Greșeli frecvente

  • Aștepți ca round(2.675 * 100) / 100 să dea 2.68. 2.675 este memorat ca 2.67499999…, deci rezultatul este 2.67. Pentru bani, lucrează în bani întregi (long long), nu în lei cu zecimale.
  • Faci (int)(x + 0.5) pentru rotunjire: este greșit pentru numere negative. Folosește std::lround.

Comenzi înrudite

  • std::floor: Rotunjește în jos la cel mai apropiat întreg (floor) sau în sus (ceil).
  • std::trunc: Taie partea zecimală a unui număr, rotunjind spre zero.
  • std::fmod: Calculează restul împărțirii a două numere cu virgulă (echivalentul lui % pentru double).