C語言小數四捨五入輸出可控制位數
阿新 • • 發佈:2019-02-08
本文章說明怎樣使得你能保留小數點後幾位(四捨五入)及其可控制的位數的實現:
#include <stdio.h>
int main()
{
double a = 423.43654;
a = int(a*100+0.5)/100.0; //到這的a值變成了423.440000
printf("%lf\n", a); //以小數後兩位的形式輸出
return 0;
}
執行結果:
423.44
負數的情況:
#include <stdio.h> int main() { double a = -423.43654; a = int(a*100-0.5)/100.0; //到這的a值變成了-423.440000 printf("%.2lf\n", a); //以小數後兩位的形式輸出 return 0; }
執行結果:
-423.44
由上面兩個例項可以看出區別,正負數都能得到相應的結果。原理是:比如當一個數要保留n位時,我們可以先將其乘上10的n次方在加減去0.5,然後除以10的n次方(後面的.0不能省略,因為這保證了最後運算出來的是個小數)。
拿上面的例項來說吧:
(423.43654*100+0.5)/100 == 423.440000,也就是說這一步的運算已經將位數(兩位)確定,而後面沒保留的位數變為零了,最後我們要做的就是將它以兩位小數的形式輸出(%.2lf)。
下面我介紹一種可以自己輸入控制保留位數的實現方法:
#include <stdio.h> #include <math.h> int main() { double a; int bit; printf("請輸入你想要四捨五入的小數:\n"); scanf("%lf", &a); printf("請輸入你想要保留的位數:\n"); scanf("%d", &bit); if (a > 0) { a = int(a*pow(double(10), double(bit))+0.5)/pow(double(10), double(bit))/1.0; } else { a = int(a*pow(double(10), double(bit))-0.5)/pow(double(10), double(bit))/1.0; } printf("%.*lf\n", bit, a); //精度控制處的*代表讀取一個int型引數並把它當做精度,即讀取bit return 0; }
執行結果:
請輸入你想要四捨五入的小數:21.124685
請輸入你想要保留的位數:
3
21.125
and
請輸入你想要四捨五入的小數:
-21.124685
請輸入你想要保留的位數:
3
-21.125
總結:這樣就可以實現可控制的小數位數輸出。
ps:如果我有錯誤的地方還是有什麼好的方法實現,請告訴我,我會改進。謝謝。