閱讀83 返回首頁    go 阿裏雲 go 技術社區[雲棲]


C# Math.Round()函數問題

Math.Round  

1、取指定位數的小數。

例如: 

Math.Round(36.236,2)=36.24; 
Math.Round(36.232,2)=36.23

2、Math.Round ()在四舍五入時有個問題: 

Math.Round(2.5,0) = 2; 
Math.Round(3.5,0) = 4; 

        2.5應該等於3才對!       

        Math.Round()準確的說,這個函數不是四舍五入,而是四舍六入五湊偶,就是說小於4或大於6的該舍該入是沒有爭議的,而5處在正中間,如果四舍五入則會造成數據的整體偏差,所以采取的原則是:如果舍入位為5,則舍入後最後一位為偶數,這是國際慣例。

        由來:

        對於0-9這10個數字來說,他們出現在某一位的幾率是相等的。在金融結算中,如果單純的使用四舍五入,那麼,入參(5-9)會比舍參(0-4)多一個,也就是說,金融機構會虧本,考慮到這種情況,也為了舍入更加公平,出現了就近舍入。既然每一位出現0-9的幾率相等,那麼,該位是偶數還是奇數的幾率也就相等,對於舍棄位,0-4舍,6-9進沒有什麼疑義,主要就在於對中間數5的處理。此時,決定5是否舍棄交由它的前一位決定,如果前一位是偶,則舍棄,如果前一位是奇,則進位,如此,就實現了大致公平的舍入處理。 

        按照銀行家舍入,考慮11.5和-11.5, 對於11.5,5前邊是奇數1,故進位,結果為12;對於-11.5,變成了-12。因此,該舍入應該叫做四舍六入五湊偶法


最後更新:2017-04-03 12:55:21

  上一篇:go Apache下實現禁止目錄瀏覽
  下一篇:go CentOS 6.5 端口轉發