Die Rundungsfunktion in C
-
Verwenden Sie die Funktion
round
, um Fließkommazahlen auf die nächste Ganzzahl zu runden und eine Fließkommazahl zurückzugeben -
Verwenden Sie die Funktion
lround
, um eine Fließkommazahl auf die nächste Ganzzahl zu runden und einen Integralwert zurückzugeben -
Verwenden Sie die Funktion
ceil
, um Fließkommazahlen auf den kleinsten ganzzahligen Wert zu runden, der nicht kleiner ist als das Argument
In diesem Artikel werden mehrere Methoden zur Verwendung der Funktion round
in C erläutert.
Verwenden Sie die Funktion round
, um Fließkommazahlen auf die nächste Ganzzahl zu runden und eine Fließkommazahl zurückzugeben
Die Funktion round
ist Teil der C-Standardbibliothek math utilities, die in der Header-Datei <math.h>
definiert ist. Es gibt drei Funktionen in dieser Familie - round
, roundf
und roundl
. Diese Funktionen sind für verschiedene Typen von Fließkommazahlen, und jede gibt den entsprechenden Typwert zurück. Beachten Sie, dass die Quelldateien, einschließlich des math
-Headers, mit dem -lm
-Flag kompiliert werden müssen, um den Bibliothekscode zu linken. Im folgenden Beispielcode demonstrieren wir die Konvertierungen für mehrere float
-Literalwerte und geben die Ergebnisse auf der Konsole aus. Beachten Sie, dass round
im Wesentlichen von der Null weg rundet. Wenn ein ganzzahliger Wert, -0
, +0
, NaN
oder INFINITY
als Argument übergeben wird, wird der gleiche Wert zurückgegeben.
#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);
}
Ausgabe:
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
Verwenden Sie die Funktion lround
, um eine Fließkommazahl auf die nächste Ganzzahl zu runden und einen Integralwert zurückzugeben
Die Funktion lround
hingegen rundet auf die nächstliegende Ganzzahl und gibt den ganzzahligen Wert zurück. Es gibt sechs Funktionen in dieser Familie, von denen die Hälfte long int
als gerundeten Wert zurückgibt und andere - long long int
. lround
rundet ähnlich wie die round
-Familie die halbwegs reellen Zahlen von Null weg.
#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);
}
Ausgabe:
lround(+2.3) = 2
lround(+2.5) = 3
lround(+2.7) = 3
lround(-2.3) = -2
lround(-2.5) = -3
lround(-2.7) = -3
Verwenden Sie die Funktion ceil
, um Fließkommazahlen auf den kleinsten ganzzahligen Wert zu runden, der nicht kleiner ist als das Argument
Alternativ kann die Funktion ceil
verwendet werden, um die gegebene Fließkommazahl auf den kleinsten ganzzahligen Wert zu runden, der nicht kleiner als das Argument selbst ist. Ähnlich wie bei der Funktion round
gibt es auch in dieser Familie drei Funktionen - ceil
, ceilf
und ceill
, die jeweils für die Typen float
, double
und long double
verwendet werden. Beachten Sie, dass wir das +
-Zeichen in die SpezifizierungsZeichenkette prinf
einfügen, und es werden automatisch die entsprechenden Vorzeichen für die gerundeten Argumente angezeigt.
#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);
}
Ausgabe:
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