C#有一個數值類型具有128位精度(參見表2-3)。它適合大而精確的計算,尤其是金融計算。
表2-3 decimal類型
類型 |
大小 |
範圍 |
BCL名稱 |
有效數字 |
decimal |
128位 |
1.0×1028~大約7.9×1028 |
System.Decimal |
28~29 |
與浮點數不同,decimal類型保證範圍內的所有十進制數都是精確的。所以,對於decimal類型來說,0.1就是0.1,而不是一個近似值。不過,雖然decimal類型具有比浮點類型更高的精度,但它的範圍較小。所以,從浮點類型轉換爲decimal類型可能發生溢出錯誤。此外,decimal的計算速度要稍微慢一些。
高級主題:解析浮點類型和decimal類型
除非超過範圍,否則decimal數字表示的十進制數都是完全準確的。與此相反,用浮點數來表示十進制數,則可能造成舍入錯誤。decimal類型和C#的浮點類型之所以存在這個區別,是因爲decimal類型的指數是十進制數,而浮點類型的指數是二進制的。
一個decimal的指數是±N×10k;其中,N是用96個比特來表示的一個正整數,而28 <= k <= 0。
而一個浮點數是±N×2k的任意數字。其中,N是用固定數量(float是24,double是53)的比特表示的一個正整數,k是149~+104(float)或者1075~+970(double)的任何整數。