> 為什么 Math.Round(4.125, 2) 的結果是 4.12 而不是 4.13
在計算機中對浮點數的處理是按 IEEE 754 標准進行的,同時該標准對舍入規則也做了約定。
默認情況下,使用 Math.Round 方法時執行的舍入規則,主要是中值的舍入規則,根據官方文檔說明是按 IEEE 754 中,“中值舍入為最接近的偶數”進行處理的。
IEEE 754 標准:https://zh.wikipedia.org/wiki/IEEE_754#%E6%B5%AE%E9%BB%9E%E6%95%B8%E7%9A%84%E6%8D%A8%E5%85%A5
> 詳細解釋
至於為什么默認按此標准執行,找到了網上的一篇解釋,覺得比較清晰,轉載如下:
當有兩個最接近的可表示的值時首選“偶數”值,這與我們常見的“四舍五入”只有一點不同,對.5的舍入上,采用取偶數的方式。 如: Round(0.5) = 0; Round(1.5) = 2; Round(2.5) = 2; 對比采用四舍五入: Round(0.5) = 1; Round(1.5) = 2; Round(2.5) = 3; 之所以IEEE754要這么做,主要是因為浮點數在計算機中存放的位數有限,其表示精度有限,所以必然有部分浮點數無法精確表示,對於這部分浮點數我們就需要舍入處理。但是對於.5,它到0和1的距離一樣近,如果我們按照四舍五入的方式舍入,則計算上的誤差會一直疊加,為了平衡誤差,我們需要等概率地取舍。從統計學角度看,二進制數舍入位的前一位是0或1的概率相等,至於為什么舍入取偶數而不是奇數,這是個歷史問題。
原文鏈接:https://blog.csdn.net/qq_20480611/article/details/52564428
> 四舍六入五成雙
然后又找到了百度百科在“四舍五入”的百科中,提到了一種叫“四舍六入五成雙”的方法,這個方法應該跟上面描述的是同一種方法,所以這個不僅僅是在計算機處理浮點數時的規則,在執行任何小數處理時,這都是一種比較科學的處理方法。
百科鏈接:https://baike.baidu.com/item/%E5%9B%9B%E8%88%8D%E5%85%AD%E5%85%A5%E4%BA%94%E6%88%90%E5%8F%8C