C 語言中的 round 函式

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

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

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

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

#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 intlround 類似於 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 函式類似,這個系列也有三個函式-ceilceilfceill,分別用於 floatdoublelong 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
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C Math