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”).roundduce jumătățile departe de zero; rotunjirea la par o facerint/nearbyintîn modul implicit. - Împarți doi întregi înainte de
ceil:ceil(37 / 6)esteceil(6), adică 6, pentru că37 / 6s-a calculat deja ca întreg. - Afișezi rezultatul lui
roundcu%d: estedouble, deci folosești%.0fsau convertești culround.
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.
Întrebări & Exemple de Cod:
round, floor, ceil, trunc și fmodAi o nelămurire despre utilizarea comenzii
round, floor, ceil, trunc și fmodsau 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.