問題描述:spa
後臺數據類型爲decimal a,在前臺頁面中顯示時須要顯示爲整數。3d
個人作法是Convert.ToInt32(a),這樣作是強制把內容轉換爲整數,改變了數據原本的意義。code
最終作法是Math.Round(a,0),將a的小數值舍入爲指定精度。blog
1.先看Math.Round()方法,是將值舍入到最接近的整數或指定的小數位數。ci
MSDN上能夠看到有這些重載的方法。string
Math.Round(3.44, 1); //Returns 3.4. Math.Round(3.45, 1); //Returns 3.4. Math.Round(3.46, 1); //Returns 3.5. MSDN上給出的示例
Math.Round(3.55, 1); //Returns 3.6 我加的一個示例
能夠看到這個「舍入」不是四捨五入,而是銀行家舍入:四捨六入五取偶法。規則是當捨去位的數值小於5時,直接捨去該位;當捨去位的數值大於等於6時,在捨去該位的同時向前位進一;當捨去位的數值等於5時,若是前位數值爲奇,則在捨去該位的同時向前位進一,若是前位數值爲偶,則直接捨去該位。class
2.再看 Convert.ToInt32(value d)方法,是一種強制類型轉換。後臺
若是 value 爲兩個整數中間的數字,則返回兩者中的偶數,即 4.5 轉換爲 4,而 5.5 轉換爲 6,一樣也是銀行家舍入。bfc
總結:一樣是對decimal取整,兩者區別是:前者只是將小數點舍入到指定精度,沒有改變數據的類型,然後者進行強制轉換改變了數據的類型。數據類型
提到了強制類型轉換爲整數,(int)方法和Convert.ToInt32(),能夠看到以下區別:
(int)方法直接截取整數部分,而Convert.ToInt32()採起銀行家舍入方式。
另還有int.Parse(string s)方法,參數必須爲string類型,並且該string類型的參數,在實際意義上也應爲int類型,