C語言四捨五入教學:round、floor、ceil 函式完整解析與實例

1. 四捨五入的基礎:為什麼需要?

在程式設計中,正確控制數值的精度非常重要。特別是當計算結果包含小數時,透過四捨五入可以讓數值更清晰、結果更易於整理。例如在金額計算或測量數據彙總時,四捨五入在各種場合都會用到。

四捨五入的實際例子

例如,把 2.5 四捨五入會得到 3,把 2.3 則得到 2。這些操作不僅在日常生活中常見,在程式設計中也經常使用,有助於簡化計算結果。

2. 在 C 語言中如何四捨五入

在 C 語言中,進行四捨五入通常會用到 math.h 函式庫中的 round() 函式。這個函式可以把傳入的實數四捨五入到最接近的整數。

round() 函式的基本用法

以下是使用 round() 的基本範例:

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

int main() {
    double x = 2.5;
    printf("四捨五入結果:%f\n", round(x));
    return 0;
}

執行這段程式後,輸出會是「四捨五入結果:3.000000」。這就是 2.5 經過 round() 四捨五入得到 3 的結果。請別忘了包含 math.h 標頭檔。

侍エンジニア塾

3. 指定小數位數的四捨五入

在 C 語言中,如果要四捨五入到指定的小數位數,還需要多一個步驟。最常見的方法是先將數值乘以 10 的 n 次方,四捨五入後再除回來,這樣就能控制到你想要的小數位。

指定小數位數的程式範例

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

int main() {
    double num = 123.456;
    num = num * 100;  // 變成兩位小數
    double result = round(num) / 100;  // 四捨五入再除回來
    printf("%.2f\n", result);  // 結果是 123.46
    return 0;
}

這個例子中,num 先乘以 100,把小數點右移兩位,然後用 round() 四捨五入,再除以 100,最後得到 123.456 四捨五入後的 123.46

4. 不用函式手動四捨五入

在 C 語言中,也可以不用 round() 函式,自己手動進行四捨五入。只要把數值加上 0.5,再強制轉型為 int,就能得到最接近的整數。

手動四捨五入的方法

#include <stdio.h>

int main() {
    double num = 2.3;
    int rounded = (int)(num + 0.5);
    printf("四捨五入結果:%d\n", rounded);
    return 0;
}

這裡,2.30.5 得到 2.8,強制轉型成 int 變成 2。這種方法在無法使用 round() 的情況下很有用。

5. 負數的四捨五入

不只正數可以四捨五入,負數也可以,但結果可能跟你想像的不同。例如,-2.5 四捨五入會變成 -3,而不是 -2。C 語言的 round() 會依這個規則處理負數。

負數四捨五入範例

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

int main() {
    double num = -2.5;
    printf("四捨五入結果:%f\n", round(num));
    return 0;
}

執行這段程式,-2.5 四捨五入會得到 -3.0。處理負數時,請特別注意結果,避免產生誤解。

6. C 語言中的其他四捨五入方式

除了普通四捨五入外,還有無條件捨去(floor)和無條件進位(ceil)等方法。在 C 語言中,可以使用 math.h 內的 floor()ceil() 來實現這些功能。

無條件捨去與進位的範例

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

int main() {
    double num = 2.7;
    printf("無條件捨去:%f\n", floor(num));  // 結果為 2.0
    printf("無條件進位:%f\n", ceil(num));   // 結果為 3.0
    return 0;
}

在這個例子裡,floor() 會把 2.7 無條件捨去成 2.0ceil() 則會進位成 3.0。依照需求選擇合適的函式即可。

7. 小結

使用 C 語言的 math.h 內的 round() 就能簡單完成四捨五入。如果要處理小數位數或負數,需要多一點步驟,但整體來說還是很彈性。另外搭配 floor()(無條件捨去)或 ceil()(無條件進位)可以滿足不同的數值處理需求。

年収訴求