Ce face std::trunc
std::trunc(x) păstrează doar partea întreagă: trunc(3.9) = 3, trunc(-3.9) = -3. Pentru numere pozitive este ca floor, pentru negative este ca ceil.
Este exact ce face conversia static_cast<int>(x), dar rezultatul rămâne double, deci nu există risc de depășire pentru numere foarte mari. Partea zecimală se obține cu x - std::trunc(x) sau cu std::modf.
Parametri
| Parametru | Descriere |
|---|---|
x |
Numărul. |
Ce returnează
Partea întreagă, ca double.
Exemple
Exemplul 1: trunc, floor și conversia la int
#include <cmath>
#include <print>
int main() {
for (double x : {3.9, -3.9}) {
std::println("x = {}: trunc = {}, floor = {}, (int) = {}", x, std::trunc(x), std::floor(x),
static_cast<int>(x));
}
}
Rezultat
x = 3.9: trunc = 3, floor = 3, (int) = 3
x = -3.9: trunc = -3, floor = -4, (int) = -3
Exemplul 2: Ore și minute dintr-o durată
#include <cmath>
#include <print>
int main() {
double ore = 2.75;
double intregi = std::trunc(ore);
double minute = (ore - intregi) * 60;
std::println("{} ore = {} h {} min", ore, intregi, minute);
}
Rezultat
2.75 ore = 2 h 45 min
Greșeli frecvente
- Folosești
trunccând voiai rotunjire:trunc(4.99)dă 4. Pentru cel mai apropiat întreg aistd::round.
Comenzi înrudite
std::floor: Rotunjește în jos la cel mai apropiat întreg (floor) sau în sus (ceil).std::round: Rotunjește la cel mai apropiat întreg; la jumătate (x,5) rotunjește în direcția opusă lui zero.std::fmod: Calculează restul împărțirii a două numere cu virgulă (echivalentul lui % pentru double).