2022年3月22日星期二

C round off,round down, round up

 
        最近蠻常用到數值處理的函式,在這裡紀錄一下,嵌入式系統內常用的數值處理函式,這些函式是在math.h 檔裡,所以使用時記得#include <math.h>。下列分別記錄函式使用方式及結果。


註:使用codeblock編譯器測試


1.四捨五入 round(float)

-程式碼

#include <stdio.h>
#include <math.h>

#define TestNum1 3.4415
#define TestNum2 3.5415

int main()
{
    printf("Number1:%f\n",TestNum1);
    printf("Round off:%f\n",round(TestNum1));
    printf("Number2:%f\n",TestNum2);
    printf("Round off:%.3f\n",round(TestNum2));

    return 0;
}

-結果

Number1:3.441500
Round off:3.000000
Number2:3.541500
Round off:4.000

我們可以觀察到,使用round()函式後,會依據小數點第二位進行四捨五入至整數位數。

2.無條件捨去floor(float)

-程式碼

#include <stdio.h>
#include <math.h>

#define TestNum1 3.4415
#define TestNum2 3.5415

int main()
{
    printf("Number1:%f\n",TestNum1);
    printf("Round up:%f\n",floor(TestNum1));
    printf("Number2:%f\n",TestNum2);
    printf("Round up:%f\n",floor(TestNum2));

    return 0;
}

-結果

Number1:3.441500
Round up:3.000000
Number2:3.541500
Round up:3.000000

我們可以觀察到,使用floor()函式後,會依據小數點後進行無條件捨去。

3.無條件進位ceil(float)

-程式碼

#include <stdio.h>
#include <math.h>

#define TestNum1 3.4415
#define TestNum2 3.5415

int main()
{
    printf("Number1:%f\n",TestNum1);
    printf("Round down:%f\n",ceil(TestNum1));
    printf("Number2:%f\n",TestNum2);
    printf("Round down:%f\n",ceil(TestNum2));

    return 0;
}

-結果

Number1:3.441500
Round down:4.000000
Number2:3.541500
Round down:4.000000

我們可以觀察到,使用ceil()函式後,會依據小數點後進行無條件進位到整數位。


參考來源

英文名稱翻譯https://blog.udn.com/hhu6314/3389484

https://fresh2refresh.com/c-programming/c-arithmetic-functions/c-round-function/

https://www.gnu.org/software/libc/manual/html_node/Rounding-Functions.html


沒有留言:

發佈留言

打賞按讚