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) / 100să 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ștestd::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).