C#中的数据类型转换

本文深入讲解了自动类型转换、强制类型转换(包括直接转换、Parse方法、Convert转换器)、字符串到值类型的转换以及任意类型之间的转换。通过实例演示了转换过程及注意事项。

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}");
}
(Kriging_NSGA2)克里金模型结合多目标遗传算法求最优因变量及对应的最佳自变量组合研究(Matlab代码实现)内容概要:本文介绍了克里金模型(Kriging)与多目标遗传算法NSGA-II相结合的方法,用于求解最优因变量及其对应的最佳自变量组合,并提供了完整的Matlab代码实现。该方法首先利用克里金模型构建高精度的代理模型,逼近复杂的非线性系统响应,减少计算成本;随后结合NSGA-II算法进行多目标优化,搜索帕累托前沿解集,从而获得多个最优折衷方案。文中详细阐述了代理模型构建、算法集成流程及参数设置,适用于工程设计、参数反演等复杂优化问题。此外,文档还展示了该方法在SCI一区论文中的复现应用,体现了其科学性与实用性。; 适合人群:具备一定Matlab编程基础,熟悉优化算法和数值建模的研究生、科研人员及工程技术人员,尤其适合从事仿真优化、实验设计、代理模型研究的相关领域工作者。; 使用场景及目标:①解决高计算成本的多目标优化问题,通过代理模型降低仿真次数;②在无法解析求导或函数高度非线性的情况下寻找最优变量组合;③复现SCI高水平论文中的优化方法,提升科研可信度与效率;④应用于工程设计、能源系统调度、智能制造等需参数优化的实际场景。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现过程,重点关注克里金模型的构建步骤与NSGA-II的集成方式,建议自行调整测试函数或实际案例验证算法性能,并配合YALMIP等工具包扩展优化求解能力。
C#中,数据类型转换是指将数据从一种类型转换为另一种类型的过程。这种转换的意义主要体现在以下几个方面: 1. **类型安全**:数据类型转换可以确保数据在转换过程中保持一致性和准确性。类型安全的转换有助于避免因类型不匹配导致的运行时错误。 2. **扩展性与灵活性**:通过数据类型转换,开发者可以在不同数据类型之间进行桥梁式的连接,从而使得代码更加灵活和可维护。例如,将整数类型转换为浮点数类型可以用于需要更精确数值计算的场景。 3. **提高性能**:在某些情况下,开发者可以通过优化数据类型转换来提高程序的性能。例如,将对象转换为更小的数据类型可以减少内存的使用。 4. **交互与兼容**:在与外部系统交互或者处理不同数据来源时,数据类型转换有助于数据格式的统一与兼容,确保数据能够被正确处理。 5. **符合业务需求**:不同的业务场景可能会对数据类型有不同的要求,通过数据类型转换可以使得数据符合特定的业务逻辑和规则。 在C#中,数据类型转换可以分为隐式转换和显式转换两种。 - **隐式转换**:是编译器自动进行的转换,无需编写额外代码,这种转换是安全的,不会导致数据丢失。例如,从int转换到long。 - **显式转换**:需要程序员使用转换运算符(如`checked`、`unchecked`、`as`、`is`、`(type)`等)来进行的转换,这种转换可能会有数据丢失的风险,因此需要程序员显式指定转换逻辑。例如,从long转换到int可能会丢失数据。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值