試煉9 - 四捨五入的坑踩過了嗎

2022 鐵人賽文 搬回點部落

開始試煉

Math 有提供 Round 方法 說明如下
將值四捨五入為最接近的整數或是指定的小數位數。

然後就很馬上測試一下
Math.Round(1.5).Dump();
結果是 2
很好沒問題就這樣用吧
直到被發Bug單 還不知道為何會有Bug

原來Math.Round針對四捨五入的預設邏輯是採用四捨六入五成雙的方式

Math.Round(0.5).Dump();
Math.Round(1.5).Dump();
Math.Round(2.5).Dump();
Math.Round(3.5).Dump();

結果會是
0
2
2
4

印象非常深刻的坑
對於 程式是按照我寫的跑 不是按照我想的跑 這句名言
不停在我腦海迴盪

回到正題要如何修好呢
public static double Round(double value, MidpointRounding mode)
MidpointRounding這個列舉 AwayFromZero 就是我們習慣的四捨五入

void Main()
{
	Math.Round(0.5,MidpointRounding.AwayFromZero).Dump();
	Math.Round(1.5,MidpointRounding.AwayFromZero).Dump();
	Math.Round(2.5,MidpointRounding.AwayFromZero).Dump();
	Math.Round(3.5,MidpointRounding.AwayFromZero).Dump();
}

結果會是
1
2
3
4
這樣就是習慣用的四捨五入了

結束試煉

今天提到Math.Round 雖然有瞭解法 但是大家在下副本時怎樣能夠讓新手村來實習的人
很容易避開這樣的坑呢 大家想想之後試煉會提到

參考
Math.Round 方法

MidpointRounding 列舉

如果內容有誤請多鞭策謝謝