La fonction ronde en C
-
Utilisez la fonction
round
pour arrondir le nombre à virgule flottante à l’entier le plus proche et renvoyer le nombre à virgule flottante -
Utilisez la fonction
lround
pour arrondir le nombre à virgule flottante à l’entier le plus proche et renvoyer le type intégral -
Utilisez la fonction
ceil
pour arrondir le nombre à virgule flottante à la plus petite valeur intégrale non inférieure à l’argument
Cet article explique plusieurs méthodes d’utilisation de la fonction round
en C.
Utilisez la fonction round
pour arrondir le nombre à virgule flottante à l’entier le plus proche et renvoyer le nombre à virgule flottante
La fonction round
fait partie des utilitaires mathématiques de la bibliothèque standard C définis dans le fichier d’en-tête <math.h>
. Il existe trois fonctions dans cette famille - round
, roundf
et roundl
. Ces fonctions sont destinées à différents types de nombres à virgule flottante et chacune renvoie la valeur de type correspondante. Notez que les fichiers source, y compris l’en-tête math
, doivent être compilés en utilisant l’indicateur -lm
pour lier le code de la bibliothèque. Dans l’exemple de code suivant, nous montrons les conversions pour plusieurs valeurs littérales float
et sortons les résultats vers la console. Notez que round
arrondit essentiellement à partir du zéro. Si la valeur intégrale, -0
, +0
, NaN
ou INFINITY
est passée en argument, la même valeur est renvoyée.
#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);
}
Production:
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
Utilisez la fonction lround
pour arrondir le nombre à virgule flottante à l’entier le plus proche et renvoyer le type intégral
La fonction lround
, quant à elle, arrondit à l’entier le plus proche et renvoie la valeur intégrale. Il y a six fonctions dans cette famille, dont la moitié renvoie long int
comme valeur arrondie et d’autres - long long int
. lround
similaire à la famille round
arrondit les nombres réels à mi-chemin de zéro.
#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);
}
Production:
lround(+2.3) = 2
lround(+2.5) = 3
lround(+2.7) = 3
lround(-2.3) = -2
lround(-2.5) = -3
lround(-2.7) = -3
Utilisez la fonction ceil
pour arrondir le nombre à virgule flottante à la plus petite valeur intégrale non inférieure à l’argument
Alternativement, la fonction ceil
peut être utilisée pour arrondir le nombre à virgule flottante donné à la plus petite valeur entière qui n’est pas inférieure à l’argument lui-même. Semblable à la fonction round
, il existe également trois fonctions dans cette famille - ceil
, ceilf
et ceill
à utiliser respectivement pour les types float
, double
et long double
. Notez que nous incluons le signe +
dans la chaîne de spécification prinf
, et il affiche automatiquement les signes correspondants pour les arguments arrondis.
#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);
}
Production:
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