c99 開始有 round() 函數(shù)處理 四舍5入。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了龍泉驛免費建站歡迎大家使用!
函數(shù)原型:
double round (double x);
float roundf (float x);
long double roundl (long double x);
C++11 有 double round (T x);
----
低于c99 的可以自己寫,例如: 絕對值+0.5,
絕對值函數(shù)原型:
double fabs (double x);
float fabs (float x);
long double fabs (long double x);
正數(shù)和負(fù)數(shù)的 四舍5入 有天花板和地板的 處理,由你自己選擇(上靠,下靠) 。
天花板和地板函數(shù)原型:
double ceil (double x);
float ceil (float x);
long double ceil (long double x);double floor (double x);
float floor (float x);
long double floor (long double x);
方法一:
#includestdio.h
int main()
{
double d1,d2,d3;
d1=-3.1415926;
d2=(int)(d1*10+0.5)*0.1;
printf("d1=%f,保留一位小數(shù)的結(jié)果為:%.1f\n",d1,d2);
d3=(int)(d1*1000+0.5)*0.001;
printf("d1=%f,保留三位小數(shù)的結(jié)果為:%.3f",d1,d3);
總結(jié)四舍五入保留n為小數(shù)
(int)(x*10的n次方+0.5)*10的負(fù)n次方;
其次這個方法對負(fù)數(shù)無效;如果非要用可以先取正數(shù)部分算,最后加上負(fù)號
}
方法二:
使用round()函數(shù)。
#include"stdio.h"
#include"math.h"
void main()
{
float x;
scanf("%f",x);
int y = round(x);
printf("%d",y);
}
擴展資料:
C語言編寫注意事項:
1、%運算符不能應(yīng)用與float或double類型。
2、char類型轉(zhuǎn)換為int型時, 無法判斷它是signed還是unsigned.這樣其結(jié)果有可能為負(fù)數(shù), 因此轉(zhuǎn)換時盡量指定signed和unsigned限制符。
3、++i與i++不同之處: ++i是先+1在使用, i++是先使用i在遞加1。
4、三元運算符"?:" 第一個表達(dá)式的括號不是必須的,但是由于三元表達(dá)式的優(yōu)先級非常低,我們還是將第一個表達(dá)式用()括起便于閱讀和理解。
5、C語言中可以使用遞歸 (即函數(shù)調(diào)用自身函數(shù)), 其不節(jié)省儲存器開銷也不加快執(zhí)行速度, 只是使程序緊湊便于理解。
四舍五入算法:如果要求精確到小數(shù)點后面的第n位,則需要對第n+1位進(jìn)行運算。方法是將該小數(shù)乘以10的n+1次方后加5,然后除以10并強制轉(zhuǎn)換變量類型為長整型,再將該數(shù)除以10的n次方,同時強制轉(zhuǎn)換類型為浮點型。
代碼實現(xiàn)如下:
long t; /*定義長整型變量t*/
t=(h*10n+1+5)/10; /*對h進(jìn)行操作,得到值浮點型,t取值時取整數(shù)部分。10n+1為要擴大的倍數(shù)*/
h=(float)t/10n; /*將t縮小10n倍,并轉(zhuǎn)換成浮點型*/
# incloud stdio
int main(void)
{
float a ;
scanf(“%f”,a);
a=(int)(a*1000+0.5)/1000.0;
printf (“%0.3f”,a);
return 0;
}
擴展資料:
其他方法實現(xiàn)四舍五入:
int myround(double indata,int precision,double * outdata)
{
long pre = 1,i;
for(i = 0; i precision; i ++)pre = pre * 10;
if(cy_FloatCompare(indata,0.00) 0)
* outdata =(int)((indata * pre)+0.5)/100.00;
else
* outdata =(int)((indata * pre)-0.5)/100.00;
return 0;
}?
// cy_FloatCompare是浮點數(shù)與0比較的函數(shù),假設(shè)它存在。返回值與strcmp相同。