1. 程式人生 > >C語言小數四捨五入輸出可控制位數

C語言小數四捨五入輸出可控制位數

本文章說明怎樣使得你能保留小數點後幾位(四捨五入)及其可控制的位數的實現:

#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:如果我有錯誤的地方還是有什麼好的方法實現,請告訴我,我會改進。謝謝。