C#数据类型转换(Parse()、TryParse()和Convert类)
C# 程序中使用 Console.ReadLine() 时,读取的数据是字符串,这时即使输入数字,此数字也会被视为字符串。这时,我们可以使用下列 3 种方式将字符串转为数字:
【实例】使用双精度浮点数重新设定上例里的成绩 sc。
如果字符串不是正规的数字,如 25P、A56 等都会造成 TryParse() 转换错误。
【实例】使用 TryParse() 重新实现第一个实例。
在上表所示的方法中,如果参数是字符串,就可以将字符串转成指定的数值;如果参数是不同类型的数值,就可以将其强制转换成指定的数值。
【实例】将字符串转成数字的应用,请输入姓名及数学和物理的成绩,然后输出平均分数。
【实例】扩充修改上面的实例,除了将字符串转换成数值外,还将双倍精度浮点数转换成整数。
使用 console.Read() 读取字符时,所读取字符是用 Unicode 码存储的,如果要显示字符可以用 Convert.ToChar(字符码),将字符码转换成字符。例如:
- 使用 Parse() 方法;
- 使用 TryParse() 方法;
- 使用 Convert 类的方法。
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
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