2011-09-09 67 views
11

在C#中,精確度有兩個小數舍入策略MidpointRounding.ToEvenMidpointRounding.AwayFromZero?我的意思是確保均衡分佈的數字是四捨五入的,或者是一個舍入策略來代表舍入的數字與另一個比較?C#舍入MidpointRounding.ToEven vs MidpointRounding.AwayFromZero

+1

接受的回答了這個問題:http://stackoverflow.com/questions/311696/why-does-net-use-bankers-rounding-as-default應該明確的事情了:) – MattDavey

+0

我認爲下面的例子更好地解釋了它。 :) –

+1

是的,它確實:) - 鏈接的問題有很多的背景信息.. – MattDavey

回答

27

從MSDN:

默認情況下,Math.Round使用MidpointRounding.ToEven。大多數人並不熟悉「舍入到均勻」作爲替代方法,「捨棄零」在學校更常見。 .NET默認爲「舍入到平均值」,因爲它在統計學上更勝一籌,因爲它沒有「捨棄零」的趨勢,而是比四捨五入更加頻繁(假設數字四捨五入爲正數)。 )

根據數據集的不同,對稱算術舍入會引入一個主要偏差,因爲它總是向上舍入中點值。舉一個簡單的例子,假設我們想確定三個值的平均值,即1.5,2.5和3.5,但是我們希望在計算它們的均值之前先將它們四捨五入到最接近的整數。請注意,這些值的真正意思是2.5。使用四元數舍入法,這些值變爲2,3和4,並且它們的平均值爲3.使用銀行家舍入,這些值變爲2,2和4,並且它們的均值爲2.67。由於後者的舍入方法更接近三個值的真正意思,它提供了最少的數據丟失。

http://msdn.microsoft.com/en-us/library/system.math.round.aspx