首页 > 编程笔记 > C#笔记 阅读:19

C#数据类型转换(Parse()、TryParse()和Convert类)

C# 程序中使用 Console.ReadLine() 时,读取的数据是字符串,这时即使输入数字,此数字也会被视为字符串。这时,我们可以使用下列 3 种方式将字符串转为数字:

C# Parse()方法

Parse() 属于 System 命名空间,功能是将字符串转换成数字,这时语法如下:
变量=数据类型.Parse(字符串);
数据类型是回传的数字类型,可以是 int(也可用 Int32)、long(也可用 Int64)、ulong(也可用 UInt64)、float(也可用 Single)、double(也可用 Double)和 decimal(也可用 Decimal)。

如果字符串不是正规的数字,如 25P、A56 等都会造成 Parse() 转换错误。

【实例】读取数据,然后执行数据转换的应用。
string name, score;
int sc;
Console.Write("请输入姓名 : ");
name = Console.ReadLine();
Console.Write("请输入成绩 : ");
score = Console.ReadLine();
sc = int.Parse(score);
Console.WriteLine($"{name} 成绩是 {sc}");
执行结果是:

请输入姓名 : 张三
请输入成绩 : 90
张三 成绩是 90

将第 8 行的 int 改为 Int32,可以得到相同的执行结果。


【实例】使用双精度浮点数重新设定上例里的成绩 sc。
string name, score;
double sc;
Console.Write("请输入姓名 : ");
name = Console.ReadLine();
Console.Write("请输入成绩 : ");
score = Console.ReadLine();
sc = Double.Parse(score);
Console.WriteLine($"{name} 成绩是 {sc}");
运行结果为:

请输入姓名 : 张三
请输入成绩 : 85.5
张三 成绩是 85.5

C# TryParse()方法

C# 提供的 TryParse() 方法也可以执行将字符串转换成数字的功能,其功能与 Parse() 一样,但是调用方式不一样,其语法如下:
数据类型.TryParse(字符串,out数据类型变量);
上述语法可以将字符串转换的结果设定给 TryParse() 内的第 2 个参数,也就是变量,第 2 个参数中的 out 表示这是回传值声明。

如果字符串不是正规的数字,如 25P、A56 等都会造成 TryParse() 转换错误。

【实例】使用 TryParse() 重新实现第一个实例。
string name, score;
Console.Write("请输入姓名 : ");
name = Console.ReadLine();
Console.Write("请输入成绩 : ");
score = Console.ReadLine();
Int32.TryParse(score, out int sc);
Console.WriteLine($"{name} 成绩是 {sc}");
执行结果为:

请输入姓名 : 张三
请输入成绩 : 90
张三 成绩是 90

程序第 6 行第 2 个参数是“out int sc”,这是因为本程序未声明 sc 变量,如果在程序声明了 sc 变量,则可以将此参数改写为“out sc”。

C# Convert类的方法

C# 的 Convert 类所提供的方法功能很多,它们除了可以将字符串转成数字,还可以进行不同类型数字的转换,下列是常见的转换方法。

C# 类 Convert 类的方法 说明
char ToChar( 参数 ) 将参数转换成字符
short ToInt16( 参数 ) 将参数转换成 16 位短整数
uint ToUInt16( 参数 ) 将参数转换成 16 位无号整数
int ToInt32( 参数 ) 将参数转换成 32 位整数
uint ToUInt32( 参数 ) 将参数转换成 32 位无号整数
long ToInt64( 参数 ) 将参数转换成 64 位长整数
ulong ToUInt64( 参数 ) 将参数转换成 64 位无号长整数
float ToSingle( 参数 ) 将参数转换成 32 位浮点数
double ToDouble( 参数 ) 将参数转换成 64 位双精度浮点数
decimal ToDecimal( 参数 ) 将参数转换成 128 位高精度浮点数
DateTime ToDateTime( 参数 ) 将参数转换成日期格式

在上表所示的方法中,如果参数是字符串,就可以将字符串转成指定的数值;如果参数是不同类型的数值,就可以将其强制转换成指定的数值。

【实例】将字符串转成数字的应用,请输入姓名及数学和物理的成绩,然后输出平均分数。
string name;
int math, phy;
double average;
Console.Write("请输入姓名 : ");
name = Console.ReadLine();
Console.Write("请输入数学成绩 : ");
math = Convert.ToInt32(Console.ReadLine());
Console.Write("请输入物理成绩 : ");
phy = Convert.ToInt32(Console.ReadLine());
average = (math + phy) / 2.0;
Console.WriteLine($"{name} 你的平均成绩是 {average}");
执行结果为:

请输入姓名 : 张三
请输入数学成绩 : 90
请输入物理成绩 : 80
张三 你的平均成绩是 85.0


【实例】扩充修改上面的实例,除了将字符串转换成数值外,还将双倍精度浮点数转换成整数。
string name;
double math, phy;
int average;
Console.Write("请输入姓名 : ");
name = Console.ReadLine();
Console.Write("请输入数学成绩 : ");
math = Convert.ToDouble(Console.ReadLine());
Console.Write("请输入物理成绩 : ");
phy = Convert.ToDouble(Console.ReadLine());
Console.WriteLine($"{name} 你的平均成绩是{(math+phy)/2}");
average = Convert.ToInt32((math + phy) / 2);
Console.WriteLine($"{name} 你的平均成绩是 {average}");
运行结果为:

请输入姓名 : 张三
请输入数学成绩 : 85.5
请输入物理成绩 : 90
张三 你的平均成绩是87.75
张三 你的平均成绩是 87


使用 console.Read() 读取字符时,所读取字符是用 Unicode 码存储的,如果要显示字符可以用 Convert.ToChar(字符码),将字符码转换成字符。例如:
Console.Write("请输入字符 : ");
int c = Console.Read();
Console.WriteLine($"你输入字符的十进制 Unicode 码值是 : {c}");
Console.WriteLine($"你输入字符的十六进制 Unicode 码值是 : {c:X}");
Console.WriteLine($"你输入的字符是 : {Convert.ToChar(c)}");
执行结果为:

请输入字符 : A
你输入字符的十进制 Unicode 码值是 : 65
你输入字符的十六进制 Unicode 码值是 : 41
你输入的字符是 : A

如果输入汉字,这个程序也可以获得此汉字的 10 进制或 16 进制的 Unicode 码值。

相关文章