通常,数字可以分为两种类型:整数类型 和 浮点类型。
整数类型数字是不带小数点的整数。它可以是负数或正数。
浮点类型是具有一个或多个小数点的数字。它可以是负数或正数。
C#根据它们在内存中的大小和存储数字的能力,为整数类型和浮点类型包括不同的数据类型。
下图说明了C#中的数字类型。
整数类型数字是带小数点的正或负整数。C#包括四种用于整数的数据类型:字节,短整数,整数和长整数(byte, short, int, long)。
字节数据类型存储从0到255的数字。它在内存中占据8位。byte关键字是.NET中Byte结构的别名。
sbyte与byte相同,但是它可以存储-128到127之间的负数。sbyte关键字是.NET中SByte结构的别名。
byte b1 = 255; byte b2 = -128;// 编译时错误:常量值“ -128”不能转换为“字节” sbyte sb1 = -128; sbyte sb2 = 127; Console.WriteLine(Byte.MaxValue);//255 Console.WriteLine(Byte.MinValue);//0 Console.WriteLine(SByte.MaxValue);//127 Console.WriteLine(SByte.MinValue);//-128
short数据类型是一个有符号整数,可以存储-32,768到32,767之间的数字。它占用16位内存。short关键字是.NET中Int16结构的别名。
ushort数据类型是无符号整数。它只能存储0到65535之间的正数。ushort关键字是.NET中UInt16结构的别名。
short s1 = -32768; short s2 = 32767; short s3 = 35000;//编译时错误:常量值“ 35000”不能转换为“ short” ushort us1 = 65535; ushort us2 = -32000; //编译时错误:常量值“ -32000”不能转换为“ ushort” Console.WriteLine(Int16.MaxValue);//32767 Console.WriteLine(Int16.MinValue);//-32768 Console.WriteLine(UInt16.MaxValue);//65535 Console.WriteLine(UInt16.MinValue);//0
int数据类型是32位有符号整数。它可以存储从-2,147,483,648到2,147,483,647的数字。int关键字是.NET中Int32结构的别名。
uint是32位无符号整数。uint关键字是.NET中UInt32结构的别名。它可以存储从0到4,294,967,295的正数。(可选)在数字后使用U或u后缀将其分配给uint变量。
int i = -2147483648; int j = 2147483647; int k = 4294967295; //编译时错误:无法将类型'uint'隐式转换为'int'。 uint ui1 = 4294967295; uint ui2 =-1; //编译时错误:常量值“ -1”不能转换为“ uint” Console.WriteLine(Int32.MaxValue);//2147483647 Console.WriteLine(Int32.MinValue);//-2147483648 Console.WriteLine(UInt32.MaxValue);//4294967295 Console.WriteLine(UInt32.MinValue);//0
int数据类型也用于十六进制和二进制数。十六进制数字以0x或0X前缀开头。从C#7.2开始,二进制数以0b或0B开头。
int hex = 0x2F; int binary = 0b_0010_1111; Console.WriteLine(hex); Console.WriteLine(binary);
long类型是64位有符号整数。它可以存储从-9,223,372,036,854,775,808到9,223,372,036,854,775,807的数字。使用带有数字的l或L后缀将其分配给long类型变量。long关键字是.NET中Int64结构的别名。
ulong类型存储从0到18,446,744,073,709,551,615的正数。如果数字后缀为UL,Ul,uL,ul,LU,Lu,lU或lu,则其类型为ulong。uint关键字是.NET中UInt64结构的别名。
long l1 = -9223372036854775808; long l2 = 9223372036854775807; ulong ul1 = 18223372036854775808ul; ulong ul2 = 18223372036854775808UL; Console.WriteLine(Int64.MaxValue);//9223372036854775807 Console.WriteLine(Int64.MinValue);//-9223372036854775808 Console.WriteLine(UInt64.MaxValue);//18446744073709551615 Console.WriteLine(UInt64.MinValue);//0
浮点数是带一个或多个小数点的正数或负数。C#包括三种浮点数数据类型:浮点数,双精度数 和 小数(float, double, decimal)。
float数据类型可以存储从3.4ee038到3.4e + 038的分数。它在内存中占用4个字节。float关键字是.NET中Single结构的别名。
使用带有文字的 f 或 F 后缀使其成为浮点型。
float f1 = 123456.5F; float f2 = 1.123456f; Console.WriteLine(f1);//123456.5 Console.WriteLine(f2);//1.123456
double数据类型可以存储从1.7e?308到1.7e + 308的小数。它在内存中占用8个字节。double关键字是.NET中Double结构的别名。
使用带文字的 d 或 D 后缀使其成为双精度型。
double d1 = 12345678912345.5d; double d2 = 1.123456789123456d; Console.WriteLine(d1);//12345678912345.5 Console.WriteLine(d2);//1.123456789123456
decimal 数据类型可以存储从±1.0 x 10-28到±7.9228 x 1028的小数。它在内存中占据16个字节。decimal 是.NET中Decimal结构的关键字别名。
decimal 类型比浮点和双精度类型具有更高的精度和更小的范围,因此适用于财务和货币计算。
使用带有文字的 m 或 M 后缀使其成为 decimal 类型。
decimal d1 = 123456789123456789123456789.5m; decimal d2 = 1.1234567891345679123456789123m; Console.WriteLine(d1); Console.WriteLine(d2);
使用 e 或E 表示10的幂,作为科学记数法的指数部分,使用浮点数、双精度数或小数。
double d = 0.12e2; Console.WriteLine(d); // 12; float f = 123.45e-2f; Console.WriteLine(f); // 1.2345 decimal m = 1.2e6m; Console.WriteLine(m);// 1200000