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位)
————————————————
版權聲明:本文為CSDN博主「wf_wenli」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wf_wenli/article/details/8820555


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM