CS1L7——显式转换
CS1L7——显式转换
显式转换
显式转换就是将不能隐式转换的变量类型手动强制转换为另一种类型,这种转换需要用额外的指令和语法(显式转换的类型)进行强行转换
显式转换主要有四种类型:括号强转、Parse()、Convent()、ToString()
关键字
1 | ___.Parse() //字符串类型转换为相应的类型 |
显式转换的类型
-
括号强转
括号强转是将高精度的类型转换为低精度的类型,
bool
和 string
不能通过括号强转注意!括号强转时刻要注意当前变量是否超出要转换的类型的范围!否则可能会出现异常(溢出而导致数字显示不正确)
1
2
3//语法:变量类型 变量名 = (变量类型)变量;
//注意:精度问题 范围问题
short s = (short)i;有符号整形的转换
1
2
3//有符号整形
int i = (int)l;
sbyte sb = (sbyte)s;括号强转可能会出现范围问题造成的异常(下面的结果就是超出范围导致溢出了)
1
2
3i = 40000;
short s = (short)i;
Console.WriteLine(s);输出:
1
-25536 //结果是异常的
无符号整形的转换
1
2//无符号整形
b = (byte)ui;浮点数之间的转换
浮点数括号强转可能会出现精度丢失(四舍五入)
1
2
3
4//浮点数之间
d = 1.123456789123456789;
f = (float)d;
Console.WriteLine(f);输出:
1
1.1234568 //浮点数括号强转可能会出现精度丢失(四舍五入)
无符号和有符号的相互转换
将负数转化为无符号会出现异常
在转换时时刻注意范围,否则结果可能会出现异常1
2
3
4//无符号和有符号
i = -1;
ui = (uint)i;
Console.WriteLine(ui);输出:
1
4294967295 //结果是异常的!
浮点与整形之间的转换
浮点转整形会直接抛弃小数点后的部分,不会四舍五入
1
2
3//浮点与整形
i = (int)1.789f;
Console.WriteLine(i);输出:
1
1 //浮点转整形会直接抛弃小数点后的部分,不会四舍五入
char和数值类型的转换
1
2
3
4i = 'A';
c = (char)i;
Console.WriteLine(i);
Console.WriteLine(c);输出:
1
265
A -
Parse法
作用:把字符串类型转换为相应的类型
语法:变量类型.Parse("字符串")
注意:字符串必须能够转换为相应类型否则报错,填写超出变量类型的范围内的内容也会报错-
有符号
1
2
3
4
5
6//有符号
int i4 = int.Parse("123");
Console.WriteLine(i4);
short s5 = short.Parse("123");
Console.WriteLine(s5); //注意!填写超出变量类型的范围内的内容也会报错
Console.WriteLine(sbyte.Parse("1")); //直接打印语句的结果输出:
1
2
3123
123
1 -
无符号
规则与有符号相同
1
2
3
4//无符号
Console.WriteLine(byte.Parse("2"));
Console.WriteLine(ushort.Parse("3"));
Console.WriteLine(uint.Parse("4"));输出:
1
2
32
3
4 -
浮点数
写超出范围的会四舍五入
1
2
3float f4 = float.Parse("1.232323232323"); //写超出范围的会四舍五入
Console.WriteLine(f4);
double d4 = double.Parse("1.2323");输出:
1
1.2323233
-
特殊类型
1
2
3
4bool b5 = bool.Parse("true");
Console.WriteLine(b5);
char c2 = char.Parse("A");
Console.WriteLine(c2);输出:
1
2True
A
-
-
Convent法
作用:更准确的将各种类型进行相互转换
语法:Convert.To目标类型(变量或常量)
注意:填写的变量或常量必须正确,否则报错-
字符串转其他
如果是字符串转其他类型,填写了不符合规则内的内容就会报错
1
2int a = Convert.ToInt32("12"); //32是位数,4个字节有32位
Console.WriteLine(a);输出:
1
12
-
浮点数转整数
Convent
比括号强转更好,会四舍五入1
2a = Convert.ToInt32(1.654321f);
Console.WriteLine(a);输出:
1
2
-
bool值可以转成数值类型
true
对应1
,false
对应0
1
2
3
4a = Convert.ToInt32(true);
Console.WriteLine(a);
a = Convert.ToInt32(false);
Console.WriteLine(a);输出:
1
21
0 -
char
也可以转换为数值类型会转换为字符对应的编码
1
2a = Convert.ToInt32('A');
Console.WriteLine(a);输出:
1
65
每种类型都存在对应类型的Convert方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19//每种类型都存在对应类型的Convert方法
sbyte sb2 = Convert.ToSByte("1");
short s3 = Convert.ToInt16("1"); // short占16位,因此可以视为int16
int s4 = Convert.ToInt32("1");
long l4 = Convert.ToInt64("1"); // long占64位,因此可以视为int64
byte b2 = Convert.ToByte("1");
ushort us3 = Convert.ToUInt16("1"); // ushort占16位,因此可以视为uint16
uint us4 = Convert.ToUInt32("1");
ulong ul4 = Convert.ToUInt64("1"); // ulong占64位,因此可以视为uint64
float f2 = Convert.ToSingle("1"); // float是单精度,因此可称为single
double d2 = Convert.ToDouble("1");
decimal de2 = Convert.ToDecimal("1");
bool b3 = Convert.ToBoolean("true"); //注意是Toboolean
char c4 = Convert.ToChar("A");
string str5 = Convert.ToString(12345678); -
-
其他类型转string
作用:拼接打印
语法:变量.toString();
1
2
3
4
5
6
7
8
9
10string str4 = 1.ToString();
str4 = true.ToString();
str4 = 'A'.ToString();
str4 = 1.2f.ToString();
int aa = 1;
str4 = aa.ToString();
Console.WriteLine("123123" + 1 + true);
Console.WriteLine("字符串拼接时会自动将非字符串类型使用.ToString()");输出:
1
21231231True
字符串拼接时会自动将非字符串类型使用.ToString()
本课源代码
1 | namespace lesson7显式转换 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!