C 中的除法和四捨五入運算

2021-06-03 18:26:30 字數 2981 閱讀 3877

1.除法運算

當你使用以下**:

double d = 3/6;

console.writeline(d);

時,得到的結果會是0,而不是你期望的0.5

此時c#將3當作整數來處理了,結果它也會返乙個整數。

所以,你應該將這一句改為

double d = 3.0/6;

或者double d = convert.todouble(3)/6;

或者double d = (double)3/6;

都可以得到你期望的0.5

2.四捨五入運算

在c#中沒有四捨五入,只有四捨六入五成雙

四捨六入好理解,五成雙的含義是系統會往乙個比較接近的偶數上靠。

例如四捨 math.round(3.624,2) 結果 為 3.62

六入 math.round(3.626,2) 結果為 3.63

五成雙 math.round(3.625,2)結果為3.62

math.round(3.635,2)結果為3.64

所以如果你想要實現四捨五入,需要自己寫乙個方法完成,可以參考以下思路和**

如2.45要四捨五入到小數後一位,可以先給2.45*10,然後加0.5,再取整,再除以10就ok了

public double c1round(double value, int digit) 

int ivalue =1

;for (

inti =1

; i

<=

x; i++)

double

int

=math.round(v

*ivalue

+0.5, 0

);v =

int

/ivalue;

if (isnegative)

return

v;}

經過簡單的測試,上面的函式能實現對資料的四捨五入法。

math.round ()在四捨五入時有個問題:   

math.round(2.5,0) = 2;   

math.round(3.5,0) = 4;

2.5應該等於3才對!

在asp中也存在這個問題,不過asp中還有個formatnumber可以用,但目前還不知道怎麼使用?

解釋:math.round()準確的說,這個函式不是四捨五入,而是四捨六入五湊偶,就是說小於4或大於6的該舍該入是沒有爭議的,而5處在正中間,如果四捨五入則會造成資料的整體偏差,所以採取的原則是:如果捨入位為5,則捨入後最後一位為偶數,這是國際慣例。

現在做的專案都要5入,解決方法:

目前做法是: 

如:(3.45*10+0.5)取整,再除以10

c# 中沒有四捨五入函式,事實上我知道的程式語言都沒有四捨五入函式,因為四捨五入演算法不科學,國際通行的是 banker 捨入法 banker 's rounding(銀行家捨入)演算法,即四捨六入五取偶。事實上這也是 ieee 規定的捨入標準。因此所有符合 ieee 標準的語言都應該是採用這一演算法的 

math.round 方法預設的也是 banker 捨入法 在 .net 2.0 中 math.round 方法有幾個過載方法 

math.round(decimal, midpointrounding) 

math.round(double, midpointrounding) 

math.round(decimal, int32, midpointrounding) 

math.round(double, int32, midpointrounding) 

將小數值捨入到指定精度。midpointrounding 引數,指定當乙個值正好處於另兩個數中間時如何捨入這個值 

該引數是個 midpointrounding 列舉 

此列舉有兩個成員:

awayfromzero 當乙個數字是其他兩個數字的中間值時,會將其捨入為兩個值中絕對值較大的值。 

toeven 當乙個數字是其他兩個數字的中間值時,會將其捨入為最接近的偶數。 

所以,要實現四捨五入函式,對於正數,可以加乙個 midpointrounding.awayfromzero 引數指定當乙個數字是其他兩個數字的中間值時其捨入為兩個值中絕對值較大的值,例: 

math.round(3.45, 2, midpointrounding.awayfromzero) 

不過對於負數上面的方法就又不對了 

因此需要自己寫個函式來處理 

double chinaround(double value, int decimals) 

else  } 

有些時候不一定要用四捨五入的,可能需要上取整或下取整:

math.ceiling()和math.floor 

math.ceiling(3.1)=4;    

math.floor(3.9)=3;

取天板值與地板值,與"四捨五入"無關。其實floor的結果與(int)相同,因此也可以這樣寫math.floor((double)2/3+0.5)

floor 和 ceil是math unit 裡的函式,使用前要先 uses math。

trunc 和 round 是system unit 裡的函式,預設就可以用。

floor 直接往小的取,比如 floor(-123.55)=-124,floor(123.55)=123

trunc 直接切下整數,比如 trunc(-123.55)=-123, floor(123.55)=123

ceil 直接往大的取,比如 ceil(-123.55)=-123, ceil(123.55)=124

round 計算四捨五入,比如 round(-123.55)=-124,round(123.55)=124

c#取整函式向上取整例項

int a = 5;

int b = 2;   

lbl.text = convert.tostring(math.ceiling((double)a / (double)b));

C 中的除法和四捨五入運算

c 中的除法和四捨五入運算 1.除法運算 當你使用以下 double d 3 6 console.writeline d 時,得到的結果會是0,而不是你期望的0.5 此時c 將3當作整數來處理了,結果它也會返乙個整數。所以,你應該將這一句改為 double d 3.0 6 或者double d co...

c 四捨五入

在處理一些資料時,我們希望能用 四捨五入 法實現,但是c 採用的是 四捨六入五成雙 的方法,如下面的例子,就是用 四捨六入五成雙 得到的結果 double d1 math.round 1.25,1 1.2double d2 math.round 1.24,1 1.2double d3 math.ro...

c 四捨五入

math.round跟conver.toint32一樣,都是使用四捨六入五成雙的規則,例如 math.round 3.2 返回3 math.round 3.6 返回4 math.round 3.5 返回4 math.round 2.5 返回2 要做到四捨五入,可加上引數midpointroundin...