1 自动类型转换
自动转换的条件:
- 两种类型必须是值类型(整型和浮点类型)。
- 目标类型必须大于要转换的类型,例如double大于int。
static void Method()
{
double a = 10.25;
int b = 20;
double result = a + b;
Console.WriteLine($"【自动类型转换】10.25+20={result}");
}
2 强制类型转换
2.1 类型直接转换(值类型之间)
static void Method()
{
Console.WriteLine(" \r\n【强制转换】:(类型名) 表达式 \r\n");
double a = 10.25;
int b = 20;
int result = (int)a + b; //实现强制类型转换,但是精度会丢失
Console.WriteLine($"【dobule-->目标int】10.25+20={result} 【精度会丢失】");
a = 10.50;
result = (int)a + b; //实现强制类型转换,但是精度会丢失
Console.WriteLine($"【dobule-->目标int】10.50+20={result} 【精度会丢失】");
a = 10.55;
result = (int)a + b; //实现强制类型转换,但是精度会丢失
Console.WriteLine($"【dobule-->目标int】10.55+20={result} 【精度会丢失】");
}
特别的,object类型转换成值类型也可以这样“适当的”使用:
static void Method8()
{
object a = 10.25; //这样不行,应该是 object a = 10;也就是object类型转换的时候,必须保证后面的类型和要转换的“形式上”一致。
// object a = 10;
int b = 20;
int result = (int)a + b;
// int result = (int)(double)a + b;
Console.WriteLine($"result={result}");
}
2.2 Parse(字符串->值类型)
static void Method9()
{
Console.WriteLine(" \r\n【强制转换】:类型.Parse('字符串') \r\n");
//有效类型的【字符串】转成【值类型】要求:字符串的格式必须符合目标类型的有效形式
double a = double.Parse("20.5");
float b = float.Parse("20.25");
int c = int.Parse("20");
//非有效形式:张三李四 20.2==>int
//将值类型转成字符串类型,直接使用ToString()方法
string aa = a.ToString();
string bb = b.ToString();
string cc = c.ToString();
Console.WriteLine($"a={aa},b={bb},c={cc}");
}
2.3 Convert万能转换器(任意类型之间)
static void Method()
{
Console.WriteLine(" \r\n【强制转换】:Convert \r\n");
//字符类型的浮点数,转换成正式的浮点数(完全符合我们正常的逻辑)
double a = Convert.ToDouble("20.4");
Console.WriteLine($"【字符串(string)-->值类型(double)】20.40=>{a} ");
float b = Convert.ToSingle("19.55");
Console.WriteLine($"【字符串(string)-->值类型(double)】19.55=>{b}");
int c= Convert.ToInt32("20");
Console.WriteLine($"【字符串(string)-->值类型(int)】20=>{c}");
//值类型之间(有一个特殊情况)
int d = Convert.ToInt32(20.49);
Console.WriteLine($"【值类型(double)-->值类型(int)】d=20.49=>转为整数 {d} 舍掉");
d = Convert.ToInt32(19.49);
Console.WriteLine($"【值类型(double)-->值类型(int)】d=19.49=>转为整数 {d} 舍掉");
d = Convert.ToInt32(20.55);
Console.WriteLine($"【值类型(double)-->值类型(int)】d=20.55=>转为整数 {d} 进位");
d = Convert.ToInt32(19.55);
Console.WriteLine($"【值类型(double)-->值类型(int)】d=19.55=>转为整数 {d} 进位");
Console.WriteLine("\r\n----------------------【小数部分等于0.5的时候是特殊情况】----------------------\r\n");
d = Convert.ToInt32(20.50);
Console.WriteLine($"【值类型(double)-->值类型(int)】d=20.50=>转为整数 {d} 舍掉");
d = Convert.ToInt32(19.50);
Console.WriteLine($"【值类型(double)-->值类型(int)】d=19.50=>转为整数 {d} 进位 【特殊】:小数部分等于0.5的时候,看整数部分:奇进、偶不进");
//时间转换
DateTime dateTime = Convert.ToDateTime("2025-01-11");
Console.WriteLine(" 【时间转换】" + dateTime);
double f = Convert.ToDouble(20);
Console.WriteLine($"【值类型(int)-->值类型(double)】f=20=>{f} 正常");
}
强制转换中的特殊问题:
static void Method()
{
//以下方法不行!
//int a = int.Parse("35.8");
//int b = Convert.ToInt32("35.8");
Console.WriteLine("强制类型转换中特殊问题的解决:");
//通过中间转换
int a = (int)double.Parse("35.8");
int b = (int)Convert.ToDouble("35.8");
Console.WriteLine($"a=>35.8=>{a} b=>35.8=>{b}");
}