簡介
在Code Review的時候,會看到同仁用Math.Round
或Convert.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.5
、3.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
轉整數的時候,也會遇到這個問題喔~要稍微注意一下。
參考資料
如有錯誤或建議,歡迎留言指教,謝謝!!
(相關內容如有侵犯隱私或著作權,請協助通知刪除,感謝)
沒有留言:
張貼留言