2019年2月25日 星期一

[C#] Math.Round 數字四捨五入

[C#] Math.Round 數字四捨五入

簡介

在Code Review的時候,會看到同仁用Math.RoundConvert.ToInt32做四捨五入,但常常沒注意到程式裡的小細節,如果使用預設的話其實是四捨六入五成雙,我們來看看下面的例子比較清楚。

Math.Round

// Default
Math.Round(2.5, 0); // Result: 2
// ToEven
Math.Round(2.5, 0, MidpointRounding.ToEven); // Result: 2
// AwayFromZero
Math.Round(2.5, 0, MidpointRounding.AwayFromZero); // Result: 3
// Default
Math.Round(3.5, 0); // Result: 4
// ToEven
Math.Round(3.5, 0, MidpointRounding.ToEven); // Result: 4
// AwayFromZero
Math.Round(3.5, 0, MidpointRounding.AwayFromZero); // Result: 4
Values Default ToEven AwayFromZero
2.5 2 2 3
3.5 4 4 4

以上可以發現當2.53.5進位後數值會不一樣,如果要得到我們數學上學的四捨五入,可以指定MidpointRounding.AwayFromZero


Convert.ToInt32

Convert.ToInt32(2.4); // Result: 2
Convert.ToInt32(2.5); // Result: 2
Convert.ToInt32(2.6); // Result: 3
Convert.ToInt32(3.4); // Result: 3
Convert.ToInt32(3.5); // Result: 4
Convert.ToInt32(3.6); // Result: 4

在使用Convert.ToInt32轉整數的時候,也會遇到這個問題喔~要稍微注意一下。



參考資料

Math.Round Method


如有錯誤或建議,歡迎留言指教,謝謝!!
(相關內容如有侵犯隱私或著作權,請協助通知刪除,感謝)

沒有留言:

張貼留言