描述

  在實際開發中decimal.Round(1.23525,4)!=1.2353實際是1.2352,而decimal.Round(1.23535,4)==1.2354

說明

  四捨五入:當捨去位的數值大於等於5時,在捨去該位的同時向前位進一;當捨去位的數值小於5時,則直接捨去該位。

  銀行四捨五入:當捨去位的數值小於5時,直接捨去該位;當捨去位的數值大於等於6時,在捨去該位的同時向前位進一;當捨去位的數值等於5時,如果前位數值為奇,則在捨去該位的同時向前位進一,如果前位數值為偶,則直接捨去該位。

eg:我們對1.234,1.345,1.355,1.366分別進行四捨五入和銀行四捨五入

  四捨五入        銀行四捨五入

    1.23          1.23

    1.35          1.34

    1.36          1.36

    1.37          1.37

解決方法

  我們既可以使用Round帶三個引數的Round方法實現四捨五入,但列舉值必須使用MidpointRounding.AwayFromZero(四捨五入),而不能使用MidpointRounding.ToEven(銀行四捨五入)。

測試有效效果

  decimal.Round(1.23525,4,MidpointRounding.AwayFromZero)=1.2353,而decimal.Round(1.23535,4,MidpointRounding.AwayFromZero)==1.2354

參考資料

  本文參考 “李濤的技術專欄” 部落格,http://terryli.blog.51cto.com/704315/154840