1. 程式人生 > >C#中int、long、float、double、decimal最大值最小值

C#中int、long、float、double、decimal最大值最小值

最近在將java上寫的一個簡單的表示式求值計算器移植到Windows Phone 8,java中double的精度問題是很明顯的,解決辦法是改用BigDecimal類。所以覺得C#中用double也是不太好的。
C#中用作精度計算的一個數據型別是decimal,對應的類是Decimal
decimal的表示範圍是
(-7.9 x 1028 - 7.9 x 1028) / (100 - 28)
(詳見http://technet.microsoft.com/zh-cn/364x0z75.aspx)
顯而易見,decimal能表示的最大數比double要小得多,
經查詢一下是各資料型別能表示的最大值和最小值:
int型別的最大值:  2147483647,最小值:  -2147483648
uint型別的最大值:  4294967295,最小值:  0
byte型別的最大值:  255,最小值:  0
sbyte型別的最大值:  127,最小值:  -128
short型別的最大值:  32767,最小值:  -32768
ushort型別的最大值:  65535,最小值:  0
long型別的最大值:  9223372036854775807,最小值:  -9223372036854775808
ulong型別的最大值:  18446744073709551615,最小值:  0
float型別的最大值:  3.402823E+38,最小值:  -3.402823E+38
double型別的最大值:  1.79769313486232E+308,最小值:  -1.79769313486232E+308
decimal型別的最大值:  79228162514264337593543950335,最小值:  -79228162514264337593543950335
下面的程式碼說明了double和decimal表達精度能力的不同:
static void Main(string[] args)
        {
            String str1 = Console.ReadLine();
            String str2 = Console.ReadLine();
            double i = double.Parse(str1);
            double j = double.Parse(str2);
            Console.WriteLine("i * j = " + i * j);
            decimal k = decimal.Parse(str1);
            decimal l = decimal.Parse(str2);
            Console.WriteLine("k * l = " + k * l);
        }
輸入:
0.333333333333333333333333333333333333333333
3
執行結果:
1
0.9999999999999999999999999999 (小數點後28位)