C 語言中的 round 函式
Jinku Hu
2023年10月12日
本文將介紹幾種在 C 語言中使用 round
函式的方法。
使用 round
函式將浮點數舍入到最接近的整數並返回浮點數
round
函式是 C 標準庫數學工具的一部分,定義在 <math.h>
標頭檔案中。這個系列有三個函式-round
、roundf
和 roundl
。這些函式適用於不同型別的浮點數,每個函式都返回相應的型別值。需要注意的是,包括 math
頭在內的原始檔,需要使用 -lm
標誌來連結庫程式碼進行編譯。在下面的示例程式碼中,我們演示了多個 float
字面值的轉換,並將結果輸出到控制檯。注意 round
基本上是從零開始捨去。如果將積分值 -0
、+0
、NaN
或 INFINITY
作為引數傳遞,則返回相同的值。
#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);
}
輸出:
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
使用 lround
函式將浮點數舍入到最接近的整數並返回整數型別
另一方面,lround
函式將整數舍入到最接近的整數,並返回積分值。這個系列有六個函式,其中一半的函式返回 long int
作為整數,其他的函式則返回 long long int
。lround
類似於 round
系列,將一半的實數從零開始舍入。
#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);
}
輸出:
lround(+2.3) = 2
lround(+2.5) = 3
lround(+2.7) = 3
lround(-2.3) = -2
lround(-2.5) = -3
lround(-2.7) = -3
使用 ceil
函式將浮點數舍入到不小於引數的最小整數值
另外,ceil
函式可以用來將給定的浮點數四捨五入到不小於引數本身的最小整數值。與 round
函式類似,這個系列也有三個函式-ceil
、ceilf
和 ceill
,分別用於 float
、double
和 long double
型別。請注意,我們在 prinf
指定符字串中包含+
號,它將自動為四捨五入的引數顯示相應的符號。
#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);
}
輸出:
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
作者: Jinku Hu