知识点:类型转换、数值类型间的转换、隐式类型转换、显式类型转换、数值类型和string类型的转换、Convert类转换。
1、数据类型类型转换
理解:从根本上说是类型铸造,或者说是把数据从一种类型转换为另一种类型。C#有多种数据类型,在使用各种类型的数据时,有时候需要将一种类型的数据转换为另一种类型,这就涉及到数据类型转换的方法。
为什么需要进行数据类型转换?
因为计算机对不同的数据类型有不同的保存方式,例如:int(整型) 类型在32位计算机中,占4位。而double(双精度)类型在32位计算机中,占8位。当高位转向低位的时候,如果不进行类型转换,就会造成数据溢出。为保护数据信息,需要进行数据类型转换。
不同数据类型,在内存中占用空间不一样
数据类型 | 16位编译器 | 32位编译器 | 64位编译器 |
---|---|---|---|
char | 1byte | 1byte | 1byte |
int | 2byte | 4byte | 4byte |
float | 4byte | 4byte | 4byte |
double | 8byte | 8byte | 8byte |
short int | 2byte | 2byte | 2byte |
unsigned int | 2byte | 4byte | 4byte |
long | 4byte | 4byte | 8byte |
unsigned long | 4byte | 4byte | 8byte |
long long | 8byte | 8byte | 8byte |
通俗理解:酒店单人间和豪华套间,占用空间不一样(房间面积不一样),如果要把两个房间的客人互换,需要人为进行转换(调解)。
2、数值类型间的转换
1.1 隐式类型转换
在数值类型中,将小的数据类型数据,赋值给大的数据类型变量时,就会发生隐式类型转换,也叫自动类型转换。
float a = 100;
double b = 10.5f;
在上面两个例子中,int类型的数据100,可以自动转换为float类型。float类型的数据10.5,可以自动转换为double类型。
1.2 显式转换
如果将大的数据类型数据,赋值给小的数据类型变量,就必须进行显示类型转换,也叫强制转换。
如:
将代码进行修改:int height = (int)number;
大数据类型转换为小数据类型后,会丢失精度。如例子中的double类型数据,转换为int类型后,height的值是175.
思考:将double类型转换为float类型,如何进行?怎么把float类型转换为int类型?
3、数值类型和string类型的转换
第一种,将string类型转换为数值类型。
语法:数值类型 变量名 = 数值类型.Parse(字符串变量或字符串);
string a = "123"; //声明一个字符串变量a,并赋初值123
int b = int.Parse(a); //将字符串变量a,强制转换为int类型后,赋值给int类型变量b
int c = int.Parse("11"); //将字符串11,强制转换为int类型后,赋值给int类型变量c
float d = float.Parse("12.1"); //将字符串12.1,强制转换为float类型后,赋值给float类型变量d
double e = double.Parse("123.5");//将字符串123.3,强制转换为double类型后,赋值给double类型变量e
int age = int.Parse(Console.ReadLine());//将用户输入的数据信息,强制转换为int类型后,再赋值给变量age(控制台接收的数据类型,默认是string类型)
注意:
- 将string类型转换为数值类型的前提是,string类型本身的数据是数字。
- Parse()方法,只能将字符串转换为数值。
第二种:将数值类型转换为string类型
int age = 18;
string str = age.ToString();//方法一:ToString()方法
string str1 = age + ""; //方法二:用加号连接一个空字符
4、使用Convert类进行类型转换
使用Conver类可以进行任意类型的转换。
方法 | 说明 |
Convert.ToInt32() | 转换为整型(int) |
Convert.ToChar() | 转换为字符型(char) |
Convert.ToString() | 转换为字符串型(string) |
Convert.ToDateTime() | 转换为日期型(datetime) |
Convert.ToDouble() | 转换为双精度浮点型(double) |
Conert.ToSingle() | 转换为单精度浮点型(float) |
int age = 18;
double height=175.5d;
float result = 10.5f;
string str = Convert.ToString(age);
int a = Convert.ToInt32(height);
float c = Convert.ToSingle(99.9);//方法里可以是变量,也可以是具体数据
double d = Convert.ToDouble(result);
代码练习:输入一个小数,进行四舍五入后输出
提示:将小数转换为int类型后,会丢失精度。将转换前的小数-转换后的整数=原来的小数点后面的数字。用0.5进行大小比较,进行四舍五入。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
Console.Write("请输入一个小数:");
double number1 = double.Parse(Console.ReadLine());//将用户输入的数据强制转换为double类型后,赋值给变量number1
int number2 = Convert.ToInt32(number1);//将number1的数据强制转换成int类型后,赋值给变量number2
double a = number1 - number2;//求两个数字之间的差,结果是小数,赋值给double类型变量a
int b;//声明一个变量b,用来存储四舍五入后的数据
if (a>=0.5)//四舍五入的条件:小数点后的数据大于等于0.5,结果+1
{
b = number2 +1;
}
else
{
b = number2;
}
Console.WriteLine("这个数字四舍五入后是"+b);
Console.ReadLine();
}
}
}
运行结果:
===================这里是结束分割线========================