La funzione Round in C
-
Usa la funzione
round
per arrotondare il numero a virgola mobile al numero intero più vicino e restituire il numero a virgola mobile -
Usa la funzione
lround
per arrotondare il numero a virgola mobile al numero intero più vicino e restituire il tipo integrale -
Utilizzare la funzione
ceil
per arrotondare il numero in virgola mobile al valore integrale più piccolo non inferiore all’argomento
Questo articolo spiegherà diversi metodi su come utilizzare la funzione round
in C.
Usa la funzione round
per arrotondare il numero a virgola mobile al numero intero più vicino e restituire il numero a virgola mobile
La funzione round
fa parte delle utilità matematiche della libreria standard C definite nel file di intestazione <math.h>
. Ci sono tre funzioni in questa famiglia: round
, roundf
e roundl
. Queste funzioni sono per diversi tipi di numeri in virgola mobile e ciascuna restituisce il valore del tipo corrispondente. Nota che i file sorgente, inclusa l’intestazione math
, devono essere compilati usando il flag -lm
per collegare il codice della libreria. Nel seguente codice di esempio, dimostriamo le conversioni per più valori letterali float
e inviamo i risultati alla console. Notare che round
essenzialmente arrotonda lontano dallo zero. Se il valore integrale, -0
, +0
, NaN
o INFINITY
viene passato come argomento, viene restituito lo stesso valore.
#include <fenv.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
printf("round(+2.3) = %+.1f\n", round(2.3));
printf("round(+2.5) = %+.1f\n", round(2.5));
printf("round(+2.7) = %+.1f\n", round(2.7));
printf("round(-2.3) = %+.1f\n", round(-2.3));
printf("round(-2.5) = %+.1f\n", round(-2.5));
printf("round(-2.7) = %+.1f\n", round(-2.7));
exit(EXIT_SUCCESS);
}
Produzione:
round(+2.3) = +2.0
round(+2.5) = +3.0
round(+2.7) = +3.0
round(-2.3) = -2.0
round(-2.5) = -3.0
round(-2.7) = -3.0
Usa la funzione lround
per arrotondare il numero a virgola mobile al numero intero più vicino e restituire il tipo integrale
La funzione lround
, invece, arrotonda al numero intero più vicino e restituisce il valore integrale. Ci sono sei funzioni in questa famiglia, la metà delle quali restituisce long int
come valore arrotondato e altre - long long int
. lround
simile alla famiglia round
arrotonda i numeri reali a metà distanza da zero.
#include <fenv.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
printf("lround(+2.3) = %ld\n", lround(2.3));
printf("lround(+2.5) = %ld\n", lround(2.5));
printf("lround(+2.7) = %ld\n", lround(2.7));
printf("lround(-2.3) = %ld\n", lround(-2.3));
printf("lround(-2.5) = %ld\n", lround(-2.5));
printf("lround(-2.7) = %ld\n", lround(-2.7));
exit(EXIT_SUCCESS);
}
Produzione:
lround(+2.3) = 2
lround(+2.5) = 3
lround(+2.7) = 3
lround(-2.3) = -2
lround(-2.5) = -3
lround(-2.7) = -3
Utilizzare la funzione ceil
per arrotondare il numero in virgola mobile al valore integrale più piccolo non inferiore all’argomento
In alternativa, la funzione ceil
può essere utilizzata per arrotondare il numero in virgola mobile dato al valore intero più piccolo che non è inferiore all’argomento stesso. Simile alla funzione round
, ci sono anche tre funzioni in questa famiglia - ceil
, ceilf
e ceill
da utilizzare rispettivamente per i tipi float
, double
e long double
. Nota che includiamo il segno +
nella stringa di specificazione prinf
e mostra automaticamente i segni corrispondenti per gli argomenti arrotondati.
#include <fenv.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
printf("ceil(+2.3) = %+.1f\n", ceil(2.3));
printf("ceil(+2.5) = %+.1f\n", ceil(2.5));
printf("ceil(+2.7) = %+.1f\n", ceil(2.7));
printf("ceil(-2.3) = %+.1f\n", ceil(-2.3));
printf("ceil(-2.5) = %+.1f\n", ceil(-2.5));
printf("ceil(-2.7) = %+.1f\n", ceil(-2.7));
exit(EXIT_SUCCESS);
}
Produzione:
ceil(+2.3) = 3.000000
ceil(+2.5) = 3.000000
ceil(+2.7) = 3.000000
ceil(-2.3) = -2.000000
ceil(-2.5) = -2.000000
ceil(-2.7) = -2.000000
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook