C# Math.Round 四舍六入五成雙


環境VS2005,VS2003沒有測試。

Math.Round (Decimal, Int32) 將小數值舍入到指定精度。
由 .NET Compact Framework 支持。
Math.Round (Double, Int32) 將雙精度浮點值舍入到指定精度。
由 .NET Compact Framework 支持。

msdn並沒有詳細的說明清楚,給了一個例子;
Math.Round(3.44, 1); //Returns 3.4.
Math.Round(3.45, 1); //Returns 3.4.
Math.Round(3.46, 1); //Returns 3.5.

依照他的例子得到的是"五舍六入",我改變了一下數字得到的結果將完全改變。

Math.Round(3.445, 1); //Returns 3.4.
Math.Round(3.455, 1); //Returns 3.5.
Math.Round(3.465, 1); //Returns 3.5.

Math.Round(3.450, 1); //Returns 3.4.(補0是無效的)

Math.Round(3.4452, 2); //Returns 3.45.
Math.Round(3.4552, 2); //Returns 3.46.
Math.Round(3.4652, 2); //Returns 3.47.

四舍六入五成雙 

四舍六入五成雙是一種比較精確比較科學的計數保留法,是一種數字修約規則。 

對於位數很多的近似數,當有效位數確定后,其后面多余的數字應該舍去,只保留有效數字最末一位,這種修約(舍入)規則是“四舍六入五成雙”,

 

也即“4舍6入5湊偶”這里“四”是指≤4 時舍去,

"六"是指≥6時進上,

"五"指的是根據5后面的數字來定,當5后有數時,舍5入1;

當5后無數或為0時,需要分兩種情況來講:

①5前為奇數,舍5入1;

②5前為偶數,舍5不進。  

 

具體規則如下:  

   1. 被修約的數字等於或小於4時,該數字舍去; 

 2. 被修約的數字等於或大於6時,則進位; 

 3. 被修約的數字等於5時,要看5前面的數字,若是奇數則進位,若是偶數則將5舍掉,即修約后末尾數字都成為偶數;若5的后面還有不為“0”的任何數,則此時無論5的前面是奇數還是偶數,均應進位。 

 

舉例,用上述規則對下列數據保留3位有效數字: 

 9.8249=9.82, 9.82671=9.83 

 9.8350=9.84, 9.8351 =9.84  

   9.8250=9.82, 9.82501=9.83  

從統計學的角度,“四舍六入五成雙”比“四舍五入”要科學,在大量運算時,它使舍入后的結果誤差的均值趨於零,而不是像四舍五入那樣逢五就入,導致結果偏向大數,使得誤差產生積累進而產生系統誤差,“四舍六入五成雙”使測量結果受到舍入誤差的影響降到最低。  

 

例如:1.15+1.25+1.35+1.45=5.2,

若按四舍五入取一位小數計算:  

1.2+1.3+1.4+1.5=5.4  

按“四舍六入五成雙”計算,

1.2+1.2+1.4+1.4=5.2,舍入后的結果更能反映實際結果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM