Math.Round是四捨五入還是五舍六入
阿新 • • 發佈:2019-01-23
在開發中發現一個以前未注意到的問題,
以前一直以為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