什么是类型转换?
类型转换就是不同变量类型之间的相互转换,隐式转换的基本规则就是不同类型之间自动转换,大范围装小范围
一、隐式转换
1、相同大类型之间的转换
(1)有符号:long、int、short、sbybe
eg:long l = 1;
int i = 1;
l=i;(隐式转换了,大范围装小范围)
i=l(不行,不能小范围装大范围)
(2)无符号:ulong、uint、ushort、byte
与有符号同理
(3)浮点数:decimal、double、float
注意:decimal没办法用隐式转换的形式,存储double和float
double可以存float(同理)
(4)特殊类型:bool、char、string
不存在隐式转换
2、不同大类型之间的转换
(1)无符号装有符号
不能装,因为有符号的变量不能隐式转换成无符号的变量
(2)有符号装无符号
可以装,但有符号的存储范围一定要涵盖在无符号的存储范围内
(3)浮点数装整数
可以装任何类型的整数,decimal可以隐式存储整形
(4)整数装浮点数
不能装
3、特殊类型和其它类型之间
bool:bool没有办法和其它类型相互隐式转换
char:其它类型不能隐式转换为char类型,但char类型可以隐式转换为部分整数和浮点数类型,因为char类型是一个16位无符号整数,取值范围为0~65535,所以它可以隐式转换比它宽度更大的数值类型,如int、long、ushort、ulong等
string:string没有办法和其它类型相互隐式转换
———————————————————————————————————————————
总结:高精度(大范围)装低精度(低范围)
double——>float——>整数——>char
decimal——>整数——>char
string和bool不参与隐式转换规则
———————————————————————————————————————————
二、显示转换
显示转换:手动处理,强制转换
1、括号强转
作用:一般情况下,将高精度的类型强制转换为低精度
语法:变量类型 变量名 = (变量类型)变量;
注意:精度问题,范围问题
(1)相同大类型的整形
有符号整形:short s = 1; int i = 1; s=(short)i; ——>将i强制转换为short类型
注意:括号强转可能会出现范围问题,造成数据异常
(eg:如果上面的i=40000超出了short类型的存储范围,强制转换后short装的i的值会变成-25536,就不是40000了)
无符号整形:byte b=1; uint ui = 1; b=(byte)ui;
(2)浮点之间
float f = 1.1f; double d = 102f; f=(float)d;
注意:大范围浮点数类型变量如果强转成小范围浮点数变量,则精度会变成小范围变量类型的精度
(3)无符号和有符号
uint ui2 =1; int i2 = 1; ui2=(uint)i2;
如果i2=-1,强转会异常(变量存储范围一定要注意)
(4)浮点和整形
这个强转会有精度问题(浮点数强转整形会直接抛弃小数点后面的数字)
(5)char和数值类型
(6)bool和string
两者都不能通过括号强转(bool X,string X)
2、parse法
作用:把字符串类型转换为对应的类型
语法:变量类型.Parse("字符串");
注意:字符串必须能够转换为对应类型,否则报错
(1)有符号
int i =int.Parse("123");
int i =int.Parse("123.45");——>报错!填写的字符串必须要能转成对应类型的字符,范围也必须是要能被变量存储的值,否则不符合规则会报错
(2)无符号同理
(3)浮点数同理
(4)特殊类型
bool b=bool,Parse("ture");
3、Convert法
作用:更精确的将各个类型之间进行相互转换
语法:Convert.To目标类型(变量或常量)
注意:填写的变量或常量必须正确,否则出错
(1)转字符串
int a = Convert.ToInt32("12"); 打印结果是:12
int a = Convert.ToInt32("12.21"); ——>报错
(2)转浮点数
int a = Convert.ToInt32(1.1556); 打印结果:1(会四舍五入,如果括号里是1.512,打印结果为2,意味着Convert法精度更高)
(3)转特殊类型
int a = Convert.ToInt32(true); 打印结果:1(bool类型也能用此方法强转,注意true对应1,false对应0)
注意Convert类的方法名,每一种转换类型的方法名有所不同
4、其他类型转string
作用:拼接打印
语法:变量.ToString();
上图进行字符串拼接时,会“1”和“true”会自动调用ToString方法
(上传截图多方便啊!才发觉!!)