1. 程式人生 > >Math.Round是四捨五入還是五舍六入

Math.Round是四捨五入還是五舍六入

在開發中發現一個以前未注意到的問題,

以前一直以為Math.Round是按四捨五入的原則處理的(從小到大中國的教育課程就是這樣,至少我是這樣看到的),

沒想到時代在變化,國際形式日新月異(老外實在是有才)。

居然發現還有一個五舍六入的原則,下面是Math.Round的方法總結:

Math.Round(16.425,2) = 16.42

Math.Round(16.425,2,MidpointRounding.ToEven) = 16.42

Math.Round(16.425,2,MidpointRounding.AwayFromZero) = 16.43

下面來試一下double

的方法:

Math.Round(0.145, 2, MidpointRounding.AwayFromZero) = 0.14

Math.Round(0.145, 2, MidpointRounding.ToEven) = 0.14

下面來試一下decimal的方法:

Math.Round((decimal)0.145, 2, MidpointRounding.AwayFromZero) = 0.15

Math.Round((decimal)0.145, 2, MidpointRounding.ToEven) = 0.14

MidpointRounding的列舉介紹(MSDN)。

ToEven 

當一個數字是其他兩個數字的中間值時,會將其舍入為最接近的偶數。(可以解釋為Banker's rounding(銀行家舍入)演算法,即四捨六入五取偶,是IEEE規定的舍入標準。)

AwayFromZero 

當一個數字是其他兩個數字的中間值時,會將其舍入為兩個值中絕對值較小的值。

在預設情況下都是使用ToEven