round, floor, ceil, trunc și fmod în C

Rotunjesc un număr real la întreg în moduri diferite și calculează restul împărțirii pentru numere reale.

Sintaxă
#include <math.h>
double round(double x);   double floor(double x);
double ceil(double x);    double trunc(double x);
double fmod(double x, double y);
long lround(double x);

Ce face round, floor, ceil, trunc și fmod

round rotunjește la cel mai apropiat întreg, iar jumătățile se duc departe de zero (2.5 devine 3, −2.5 devine −3). floor rotunjește în jos (spre minus infinit), ceil în sus (spre plus infinit), iar trunc taie zecimalele (spre zero).

Toate întorc tot un double. Dacă ai nevoie de un întreg, lround și llround întorc direct long / long long. Conversia simplă (int)x taie zecimalele, ca trunc.

fmod(x, y) este restul împărțirii pentru numere reale (operatorul % funcționează doar pe întregi). Rezultatul are semnul lui x.

Parametri

Parametru Descriere
x Numărul rotunjit.
y La fmod: împărțitorul.

Ce returnează

Valoarea rotunjită (double; long la lround) sau restul la fmod.

Exemple

Exemplul 1: Patru moduri de rotunjire

#include <math.h>
#include <stdio.h>

int main(void) {
    double valori[] = {2.3, 2.5, 2.7, -2.5, -2.7};
    printf("%6s %6s %6s %6s %6s\n", "x", "round", "floor", "ceil", "trunc");
    for (size_t i = 0; i < 5; i++) {
        double x = valori[i];
        printf("%6.1f %6.1f %6.1f %6.1f %6.1f\n", x, round(x), floor(x), ceil(x), trunc(x));
    }
    return 0;
}

Rezultat

     x  round  floor   ceil  trunc
   2.3    2.0    2.0    3.0    2.0
   2.5    3.0    2.0    3.0    2.0
   2.7    3.0    2.0    3.0    2.0
  -2.5   -3.0   -3.0   -2.0   -2.0
  -2.7   -3.0   -3.0   -2.0   -2.0

Exemplul 2: Câte cutii îmi trebuie?

37 de sticle, câte 6 într-o cutie: trebuie rotunjit în sus, cu ceil. Media notelor este rotunjită la cel mai apropiat întreg, cu lround.

#include <math.h>
#include <stdio.h>

int main(void) {
    int sticle = 37, pe_cutie = 6;
    printf("Cutii necesare: %.0f\n", ceil((double)sticle / pe_cutie));
    double media = (9 + 8 + 10 + 7) / 4.0;
    printf("Media %.2f, rotunjită: %ld\n", media, lround(media));
    return 0;
}

Rezultat

Cutii necesare: 7
Media 8.50, rotunjită: 9

Exemplul 3: Restul cu fmod

#include <math.h>
#include <stdio.h>

int main(void) {
    double minute = 135.5;
    printf("%.1f minute = %.0f ore și %.1f minute\n", minute, floor(minute / 60), fmod(minute, 60));
    printf("fmod(-7, 3) = %.1f\n", fmod(-7.0, 3.0));
    return 0;
}

Rezultat

135.5 minute = 2 ore și 15.5 minute
fmod(-7, 3) = -1.0

Greșeli frecvente

  • Te aștepți ca round(2.5) să dea 2 („rotunjirea bancherului”). round duce jumătățile departe de zero; rotunjirea la par o face rint/nearbyint în modul implicit.
  • Împarți doi întregi înainte de ceil: ceil(37 / 6) este ceil(6), adică 6, pentru că 37 / 6 s-a calculat deja ca întreg.
  • Afișezi rezultatul lui round cu %d: este double, deci folosești %.0f sau convertești cu lround.

Comenzi înrudite

  • math.h (sqrt, pow, fabs...): Funcțiile matematice ale limbajului C: radical, putere, valoare absolută, logaritmi și trigonometrie, pe numere double.
  • Conversii și cast: Conversiile automate dintre tipuri și cum forțezi o conversie cu (tip): de exemplu împărțire cu zecimale între două întregi.
  • Operatori aritmetici (+ - * / % ++ --): Adunare, scădere, înmulțire, împărțire, restul împărțirii, atribuiri compuse și incrementare cu ++ / –.
  • Specificatori de format (%d, %f, %s): Ce înseamnă %d, %u, %f, %e, %s, %c, %x, %zu și cum controlezi lățimea, zecimalele și alinierea în printf.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: round, floor, ceil, trunc și fmod

Ai o nelămurire despre utilizarea comenzii round, floor, ceil, trunc și fmod sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.