C 語言中的 round 函式

Jinku Hu 2023年1月30日 2021年2月28日
  1. 使用 round 函式將浮點數舍入到最接近的整數並返回浮點數
  2. 使用 lround 函式將浮點數舍入到最接近的整數並返回整數型別
  3. 使用 ceil 函式將浮點數舍入到不小於引數的最小整數值
C 語言中的 round 函式

本文將介紹幾種在 C 語言中使用 round 函式的方法。

使用 round 函式將浮點數舍入到最接近的整數並返回浮點數

round 函式是 C 標準庫數學工具的一部分,定義在 <math.h> 標頭檔案中。這個系列有三個函式-roundroundfroundl。這些函式適用於不同型別的浮點數,每個函式都返回相應的型別值。需要注意的是,包括 math 頭在內的原始檔,需要使用 -lm 標誌來連結庫程式碼進行編譯。在下面的示例程式碼中,我們演示了多個 float 字面值的轉換,並將結果輸出到控制檯。注意 round 基本上是從零開始捨去。如果將積分值 -0+0NaNINFINITY 作為引數傳遞,則返回相同的值。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <fenv.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 intlround 類似於 round 系列,將一半的實數從零開始舍入。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <fenv.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 函式類似,這個系列也有三個函式-ceilceilfceill,分別用於 floatdoublelong double 型別。請注意,我們在 prinf 指定符字串中包含+ 號,它將自動為四捨五入的引數顯示相應的符號。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <fenv.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
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

相關文章 - C Math