std::trunc în C++

Taie partea zecimală a unui număr, rotunjind spre zero.

Sintaxă
double trunc(double x);

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 trunc când voiai rotunjire: trunc(4.99) dă 4. Pentru cel mai apropiat întreg ai std::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).