『壹』 c語言中,四捨五入函數是什麼
round(x)
參數時double型,返回小數對整數部分的四捨五入值
比如 round(3.623); 返回4
『貳』 c語言中有沒有進行四捨五入的函數
四捨五入演算法:如果要求精確到小數點後面的第n位,則需要對第n+1位進行運算。方法是將該小數乘以10的n+1次方後加5,然後除以10並強制轉換變數類型為長整型,再將該數除以10的n次方,同時強制轉換類型為浮點型。
代碼實現如下:
long t;/*定義長整型變數t*/
t=(h*10n+1+5)/10;/*對h進行操作,得到值浮點型,t取值時取整數部分。10n+1為要擴大的倍數*/
h=(float)t/10n; /*將t縮小10n倍,並轉換成浮點型*/
『叄』 C語言怎麼四捨五入
利用取整。
比如 四捨五入到千分位,可以
(int)(x*1000+0.5)/1000.0
十分位(int)(x*10+0.5)/10.0
其他類似,只改變其中倍數的值即可。
『肆』 c語言中怎麼四捨五入
設 float x ; int y ; 則有y=(int)(x+0.5)>(int)x?(int)x+1:(int)x進行上述運算後,y 的值就是 x 四捨五入的結果。
『伍』 C語言取整是4舍5入還是截斷取整
floor函數與轉換類型為int都是截斷取整(向下取整)。
ceil函數是向上取整。
四捨五入的話可以寫成floor(x+0.5)
『陸』 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;
}
(6)c語言4舍5入要用什麼函數擴展閱讀:
其他方法實現四捨五入:
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相同。
『柒』 c語言的關於 : 對一個double型數據進行四捨五入運算
對double數據類型進行四捨五入運算,可以利用double轉為整型時強製取整來做到。
1 將double類型數據,強制轉換為int類型,會強制截取整數部分。
比如double a = 1.23; (int)a的值就是1。
2 由於是強製取整,所以即使是1.9轉為int後,同樣是1,這與四捨五入的要求不符。所以可以轉換一下演算法,做(int)(a+0.5)就可以實現四捨五入到整數的效果了。
3 要實現四捨五入到某一位,可以先乘一個值,將該位移動到個位,取整後,再除上這個值,將其移動回去。
比如將double a = 1.2345四捨五入保留2位小數,可以寫作
(int)(a*100+0.5)/100.0。
『捌』 C語言編寫四捨五入函數
floatnum=3.14159
floatf;
f=((int)(num*10000+0.5))/10000.0;
過程如下31415.9+0.5=31416.4
取整31416然後除以10000.0
隱式轉換為float3.1416
『玖』 c語言中如何進行四捨五入,求詳細解釋!!謝謝!
方法一:
#include<stdio.h>
int main()
{
double d1,d2,d3;
d1=-3.1415926;
d2=(int)(d1*10+0.5)*0.1;
printf("d1=%f,保留一位小數的結果為:%.1f ",d1,d2);
d3=(int)(d1*1000+0.5)*0.001;
printf("d1=%f,保留三位小數的結果為:%.3f",d1,d3);
總結四捨五入保留n為小數
(int)(x*10的n次方+0.5)*10的負n次方;
其次這個方法對負數無效;如果非要用可以先取正數部分算,最後加上負號
}
方法二:
使用round()函數。
#include"stdio.h"
#include"math.h"
void main()
{
float x;
scanf("%f",&x);
int y = round(x);
printf("%d",y);
}
(9)c語言4舍5入要用什麼函數擴展閱讀:
C語言編寫注意事項:
1、%運算符不能應用與float或double類型。
2、char類型轉換為int型時, 無法判斷它是signed還是unsigned.這樣其結果有可能為負數, 因此轉換時盡量指定signed和unsigned限制符。
3、++i與i++不同之處: ++i是先+1在使用, i++是先使用i在遞加1。
4、三元運算符"?:" 第一個表達式的括弧不是必須的,但是由於三元表達式的優先順序非常低,我們還是將第一個表達式用()括起便於閱讀和理解。
5、C語言中可以使用遞歸 (即函數調用自身函數), 其不節省儲存器開銷也不加快執行速度, 只是使程序緊湊便於理解。
『拾』 c語言中有沒有進行四捨五入的函數
首先,這個問題的解決方案取決於我們所需要的轉換方式:是截斷轉換還是舍入轉換;另一方面,它基本與我們需要轉換的浮點數類型無關──無論是 float 還是 double,甚至是 long double。
有時人們覺得一個浮點變數的值和一個整型變數的值可以完全一樣地可表示,你可能相信 x 值為 100.0 時我們只要把它轉換為整型就會得到整數 100。但在任何時候,你都不應依賴於期望一個浮點數的值能夠與一個整型數的值完全相等,你真正所需要的可能是四捨五入。
截斷轉換的意思是拋棄所有的小數部分,例如 3.9 將被轉換為 3,這種轉換是 C 語言中將浮點數轉換為整型數的默認方式,也就是說無論在什麼時候,只要將浮點數轉換為整型數,採用的都是這種方式。關於這種轉換何時發生,有一些特殊的規定,這里我們僅指出賦值時所發生的轉換,比如
i = x;
其中 i 是一個整型數,x 是一個浮點數。當然,在顯式類型轉換的情況下,這樣的轉換也會發生,比如
(int) x
舍入轉換是指獲取與給定浮點數最為接近的整型數,因此 3.9 應被轉換為 4,這才是人們提出我們正在解決的這個問題時所真正需要的。對於舍入轉換,我們沒有直接的工具(比如運算符或者庫函數),嚴格地說,舍入轉換並非與 C 標准里所定義的轉換在同一意義下的轉換。
對於正的浮點數,最簡單的四捨五入方法就是用這樣的一個表達式
(long) (x+0.5)
但是如果表達式對負數有效的話會更好,即使在你看來負數的情況不會發生。這意味著你可以用一個條件表達式:
x >= 0 ? (long)(x+0.5) : (long)(x-0.5)
這個表達式的返回值就是與浮點變數 x 的值最接近的整數值。
如果需要大量地使用舍入轉換,則可以寫這樣的一個宏:
#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
這可以在某種程度上使代碼更具可讀性。
注意到這樣的轉換會將 1.5 變為 2 但卻將 -1.5 變為 -2,那麼對於這樣正好處於兩個整數之間的浮點數,你可能需要做一些其它的處理,但這在實際當中並不十分重要。
需要小心的是,將一個浮點數轉換為一個整型數可能導致上溢,但大多數的實現都沒有進行相關的判斷。用 long 替代 int 會給出一個更寬的范圍(建議使用 long),但仍然比浮點數的范圍要小得多。
如果效率不是至關重要的話,則可以定義這樣的一個函數(而不是簡單地寫一個 #define),使你的程序更具魯棒性:
long round(double x) {
assert(x >= LONG_MIN-0.5);
assert(x <= LONG_MAX+0.5);
if (x >= 0)
return (long) (x+0.5);
return (long) (x-0.5);
}
如果在意效率的話,可以寫這樣一個宏
#define round(x) ((x) < LONG_MIN-0.5 || (x) > LONG_MAX+0.5 ?\
error() : ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
這要求在程序中有 #include <limits.h>,並且有一個處理錯誤的函數 error,其返回值為 long 類型。