Ce face std::floor
std::floor(x) returnează cel mai mare întreg care nu depășește x; std::ceil(x) returnează cel mai mic întreg care nu este mai mic decât x. Rezultatul are tot tip cu virgulă (double), deci îl convertești explicit dacă ai nevoie de int.
La numere negative, „în jos” înseamnă spre minus infinit: floor(-2.3) = -3. Dacă vrei doar să tai zecimalele, folosește std::trunc.
Parametri
| Parametru | Descriere |
|---|---|
x |
Numărul rotunjit. |
Ce returnează
Valoarea rotunjită, ca double.
Exemple
Exemplul 1: Pozitive și negative
#include <cmath>
#include <print>
int main() {
for (double x : {2.3, 2.7, -2.3, -2.7, 5.0}) {
std::println("{:>5}: floor = {:>3}, ceil = {:>3}", x, std::floor(x), std::ceil(x));
}
}
Rezultat
2.3: floor = 2, ceil = 3
2.7: floor = 2, ceil = 3
-2.3: floor = -3, ceil = -2
-2.7: floor = -3, ceil = -2
5: floor = 5, ceil = 5
Exemplul 2: Câte autobuze și câte pagini
#include <cmath>
#include <print>
int main() {
int elevi = 103;
int locuri = 45;
int autobuze = static_cast<int>(std::ceil(static_cast<double>(elevi) / locuri));
std::println("Pentru {} elevi sunt necesare {} autobuze", elevi, autobuze);
// pentru întregi pozitivi, aceeași rotunjire în sus fără double:
std::println("Pagini a câte 10 produse pentru 57 de produse: {}", (57 + 10 - 1) / 10);
double bani = 47.99;
std::println("Bancnote întregi de 1 leu: {}", std::floor(bani));
}
Rezultat
Pentru 103 elevi sunt necesare 3 autobuze
Pagini a câte 10 produse pentru 57 de produse: 6
Bancnote întregi de 1 leu: 47
Greșeli frecvente
- Scrii
std::ceil(elevi / locuri)cu douăint: împărțirea întreagă taie deja zecimalele (103 / 45 = 2) șiceilnu mai are ce rotunji. Convertește un operand ladouble.
Comenzi înrudite
std::round: Rotunjește la cel mai apropiat întreg; la jumătate (x,5) rotunjește în direcția opusă lui zero.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).