浮点常量
在C#中,一个浮点常量是由整数部分、小数点、小数部分和指数部分组成。浮点常量可以使用以下几种表示形式(大写与小写效果等价):
-
十进制表示法:使用小数点来表示浮点数(默认为double类型),例如:3.14、0.5、-1.23等等。
-
科学计数法:使用e或E来表示10的幂次方(默认为double类型),例如:1.2e-3表示0.0012,2.5E2表示250。
-
后缀f或F:用于标识浮点常量(float类型),例如:3.14f、0.5F、-1.23f等等。
-
后缀m或M:用于标识十进制浮点常量(decimal类型),例如:1.2m、0.5M、-1.23m等等。
例如,以下代码展示了C#中浮点常量的不同表示形式:
float f1 = 3.14f;
double d1 = 2.5E2;
decimal d2 = 1.2m;
请注意,在不使用任何后缀的情况下声明浮点常量时,默认为double类型。如果想要声明float类型的浮点常量,需要使用后缀f或F。同样,如果想要声明decimal类型的浮点常量,需要使用后缀m或M。
与float和double类型相比,decimal类型有以下不同之处:
- 精度更高:decimal类型的数值可以提供更高的精度,可以存储28位有效数字,而float和double类型分别只能存储7位和15位有效数字。
- 数值范围更小:decimal类型的数值可以表示比float和double类型更小的数值范围,它的取值范围约为 1.0 × 1 0 − 28 1.0 \times 10^{-28} 1.0×10−28 ~ 7.9 × 1 0 28 7.9 \times 10^{28} 7.9×1028,而float和double类型的取值范围分别为 1.5 × 1 0 − 45 1.5 \times 10^{-45} 1.5×10−45 ~ 3.4 × 1 0 38 3.4 \times 10^{38} 3.4×1038和 5.0 × 1 0 − 324 5.0 \times 10^{-324} 5.0×10−324 ~ 1.7 × 1 0 308 1.7 \times 10^{308} 1.7×10308。
- 运算精度更高:在进行运算时,decimal类型的数值可以避免一些常见的精度问题,例如float类型的数值可能会因为精度问题产生舍入误差,而decimal类型的数值可以避免这种问题。
有效数字(significant digits)是指数值中的数字中不包括前导零和末尾的零的数字,它们是对数值精度的一种度量。例如,在数值3.14159中,有效数字为6。在数值0.00314中,有效数字为3。
- 有效数字与数值范围没有关系,数值范围限制的主要是科学计数法表示时的指数大小,而有效数字限制的主要是十进制表示法时最大位数。
- 对于decimal类型,它可以存储28个有效数字,也就是说,它可以准确地表示28位小数位的数值。这比float和double类型的有效数字要多得多,float类型可以提供6-7位的有效数字,而double类型可以提供15-16位的有效数字。因此,在需要高精度计算时,使用decimal类型可以避免精度损失。
字符常量
字符常量是括在单引号里,例如'x'
,且可存储在一个简单的字符类型变量中。一个字符常量可以是一个普通字符(例如 'x'
)、一个转义序列(例如 '\t'
)或者一个通用字符(例如 '\u02C0'
)。
通用字符是一种Unicode字符,用于表示其他字符集中的字符。这些字符包括控制字符、标点符号、数学符号等。通用字符以反斜杠加上一个u和4个十六进制数字表示,其中这4个数字表示Unicode字符的代码点。
下面是一些C#中使用通用字符的示例:
using System;
class Program {
static void Main(string[] args) {
Console.WriteLine('\u0020'); // 空格字符
Console.WriteLine('\u0021'); // 感叹号字符
Console.WriteLine('\u00A9'); // 版权符号
Console.WriteLine('\u2190'); // 向左箭头
Console.WriteLine('\u2603'); // 雪花字符
}
}
输出如下:
!
©
←
☃
转义字符(序列)和通用字符虽然有相似之处,但不是一个概念,以下是常见的转义字符:
转义序列 | 含义 |
---|---|
\\ | \ 字符 |
\’ | ’ 字符 |
\" | " 字符 |
\? | ? 字符 |
\a | Alert 或 bell |
\b | 退格键(Backspace) |
\f | 换页符(Form feed) |
\n | 换行符(Newline) |
\r | 回车 |
\t | 水平制表符 tab |
\v | 垂直制表符 tab |
\ooo | 一到三位的八进制数 |
\xhh . . . | 一个或多个数字的十六进制数 |
以下是转义序列字符的实例:
namespace EscapeChar
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello\tWorld\n\n");
Console.ReadLine();
}
}
}
当上面的代码被编译和执行时,它会产生下列结果:Hello World
字符串常量
字符串常量是括在双引号 “” 里,或者是括在 @“” 里(之前提到过@符号用于消除转义序列的作用)。字符串常量包含的字符与字符常量相似,可以是:普通字符、转义序列和通用字符。
使用字符串常量时,可以把一个很长的行拆成多个行,可以使用空格分隔各个部分。
这里是一些字符串常量的实例,下面所列的各种形式表示相同的字符串:
string a = "hello, world"; // hello, world
string b = @"hello, world"; // hello, world
string c = "hello \t world"; // hello world
string d = @"hello \t world"; // hello \t world
string e = "Joe said \"Hello\" to me"; // Joe said "Hello" to me
string f = @"Joe said ""Hello"" to me"; // Joe said "Hello" to me
string g = "\\\\server\\share\\file.txt"; // \\server\share\file.txt
string h = @"\\server\share\file.txt"; // \\server\share\file.txt
string i = "one\r\ntwo\r\nthree";
string j = @"one
two
three";