本文目錄一覽:
- 1、c語言中有沒有四捨五入的函數?
- 2、C語言有沒有數據的四捨五入?什麼情況下會用到四捨五入?數據類型轉換?
- 3、C語言中有四捨五入的概念嗎
- 4、c語言怎麼四捨五入
- 5、C語言有沒有數據的四捨五入?什麼情況下會用到四捨五入?數據類型轉換?
- 6、c語言四捨五入是怎樣的?
c語言中有沒有四捨五入的函數?
c99 開始有 round() 函數處理 四舍5入。
函數原型:
double round (double x);
float roundf (float x);
long double roundl (long double x);
C++11 有 double round (T x);
—-
低於c99 的可以自己寫,例如: 絕對值+0.5,
絕對值函數原型:
double fabs (double x);
float fabs (float x);
long double fabs (long double x);
正數和負數的 四舍5入 有天花板和地板的 處理,由你自己選擇(上靠,下靠) 。
天花板和地板函數原型:
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);
C語言有沒有數據的四捨五入?什麼情況下會用到四捨五入?數據類型轉換?
有四捨五入的情況,在你想要保留幾位小數的時候,多餘的緊接著的一位要四捨五入
不過C裡面沒有提供四捨五入的函數,不過你可以這樣
a = (int)(a*100 + 0.5)/100
這只是一個小技巧,對a的第三位進行四捨五入
C語言中有四捨五入的概念嗎
C語言中有四捨五入的概念的。
實數輸出時,多餘的小數部分,是自動四捨五入進行的
c語言怎麼四捨五入
要用C語言實現四捨五入,有一個很巧妙的方法,僅使用int i=(int)(a+0.5)即可。如果遇到有負數的情況,只需要將加號改為減號即可。
C語言中四捨五入這樣表示:
inta=100.453627。
printf(“%.1f”,a+0.05);//四捨五入到十分位。
printf(“%.2f”,a+0.005);//四捨五入到百分位。
以此類推,對於十進位小數.5類型數(如0.5,11.5,18.5),即小數部分可以以2的負一次方來表示的數,這時計算機是可以「完美」的儲存這個十進位小數字。而對於.6,.7,.8,.9與.4,.3,.1,.2,這類數字,計算機雖然無法「完美」的儲存這些數字,在這樣的情況下可以運用所謂的「+0.5的取整法」。
所謂加0.5的取整法就是運用在C語言中浮點型數強制轉化為整形數時只會其保留整數,而不會進行四捨五入的計數法則。所以對於保留整數的小數來說,我們只需在其原來的基礎上+0.5後再進行強制類型轉換,就可以達到不會出錯的四捨五入。
有的標準不存在C語言四捨五入:
C語言中的四捨五入在C98標準中,標準C函數庫是沒有關於四捨五入的函數的,到了C99標準才出現了ceil(),floor(),nearbyint(),round()之類豐富的取整函數。
現在使用的gcc都是C99標準了,而Windows下的VC(包括VS2008)還是C98標準,所以需要遵從嚴格格式,包括沒有內聯inline、沒有單行注釋//、變數要寫在代碼塊的前頭等等,最大的缺點就是沒有那些函數的支持。
C語言有沒有數據的四捨五入?什麼情況下會用到四捨五入?數據類型轉換?
C語言中的float和double類型數據是浮點數,所以小數部分就存在四捨五入問題,當指定輸出位數在精度範圍之內時,系統會自動舍入,無需人工干預,如果小數部分也在精度範圍內,比如10.0/2.0 = 5.0,2位以上的輸出位數時,後面的都是0,此時,當然不需要舍入了。
數據類型轉換有兩種方式,一種是默認強制轉換,比如將char、short、Int、Long和float類型數據賦給double類型變數時,編譯程序會自動實施轉換,這是因為,在精度更高時,這樣的轉換是內有損失的。另一種是手動強制類型轉換,比如dnum = (double)inum;,意思是將整形變數inum首先轉換為雙精度數據,然後再付給dnum。當將高精度類型變數賦給低精度類型變數時,除非手動強制轉換,否則,編譯程序會有提示的。
c語言四捨五入是怎樣的?
# incloud stdio
int main(void)
{
float a ;
scanf(「%f」,a);
a=(int)(a*1000+0.5)/1000.0;
printf (「%0.3f」,a);
return 0;
}
擴展資料:
其他方法實現四捨五入:
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是浮點數與0比較的函數,假設它存在。返回值與strcmp相同。
原創文章,作者:PAQR,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/139083.html