Convert.ToInt32(转载)

本文深入探讨了C#中Convert.ToInt32、int.Parse和int.TryParse三种类型转换方法的使用及区别,包括对空字符串、null、非数字字符串的处理方式,以及在数值范围溢出情况下的表现。

转载地址:https://www.cnblogs.com/danlis/p/5106333.html

Console.WriteLine("输出转换空结果 ={0}", Convert.ToInt32("")); //Convert.ToInt32是不允许转换“”空值的,会报错

Console.WriteLine("输出转换null结果={0}", Convert.ToInt32(null));//Convert.ToInt32允许传入null参数转换,结果为0

Console.WriteLine("输出转换字母非数字结果={0}", Convert.ToInt32("12"));//正常操作

Console.WriteLine("输出转换字母非数字结果={0}", Convert.ToInt32("12ab"));//转换非数字,则直接报错

 

var aa="10";

int bb;

int.TryParse(aa, out bb);

Console.WriteLine(bb);

//结果显示10,运行正常

 

aa="abc";//特殊字符等非正常数字,或者12aa类型,结果都是0

//显示0,运行正常

 

var aa = (int.MaxValue+1).ToString();

//超出范围的时候,程序会顺利运行,但是是有错误产生的。而且,显示的值是上一次的运算结果,即之前的一次计算结果是0则是0,是1则是1。

//所以如果存在溢出这种情况,还是得仔细辨别一下。

//错误    1    在 checked 模式下,运算在编译时溢出    Projects\1111\getimage\Program.cs

 

int.Parse()与int.TryParse()Convert.ToInt32比较

http://www.cnblogs.com/fishtreeyu/archive/2011/01/15/1936193.html

 

<think>好的,我现在需要帮助用户理解C#中Convert.ToInt32处理浮点数100.6的转换规则。首先,我得回忆一下相关的知识,并查看用户提供的引用内容。 用户提到了引用[2]和引用[3],其中提到Convert.ToInt32和int.Parse的区别。Convert.ToInt32可以处理多种类型,包括浮点数。根据文档,Convert.ToInt32在处理浮点数时使用的是“四舍六入五成双”的银行家舍入法,这可能和普通的四舍五入不同。例如,100.5会转换为100,而101.5转换为102,因为中间数会向最近的偶数靠拢。 那用户的具体例子是100.6,这个数不是中间数,所以应该直接四舍五入到最近的整数。100.6的小数部分是0.6,超过0.5,所以结果应该是101。但需要确认银行家舍入法是否影响非中间数。根据我的理解,银行家舍入法主要处理像0.5这样的中间情况,其他情况还是四舍五入。因此,100.6转换后的结果应为101。 还需要注意Convert.ToInt32的转换规则是否和Math.Round相同。根据C#的文档,Convert.ToInt32(double)内部确实调用了Math.Round,而Math.Round默认使用的就是银行家舍入法。因此,当转换100.6时,由于0.6大于0.5,结果应该是101。 接下来要验证这一点,可能需要编写示例代码。例如,将100.6转换为整数,输出结果是否是101。用户提供的引用中没有直接提到100.6的例子,但引用[2]提到Convert.ToInt32可以转换继承自Object的对象,而引用[3]中的示例用了Convert.ToInt16,但原理类似。 另外,用户可能想知道为什么有时候转换结果和预期不同,比如处理100.5时变成100而不是101,这时候需要解释银行家舍入法。但用户的问题是关于100.6,所以重点是普通四舍五入的情况。 最后,总结Convert.ToInt32的转换规则,并说明100.6的结果是101,同时提醒用户注意中间值的情况可能会有不同的处理方式。这样用户就能明确了解转换机制,避免在实际编码中出现意外结果。</think>在C#中使用`Convert.ToInt32`进行浮点数转换时,其核心规则为**四舍六入五成双**的银行家舍入法(即向最接近的偶数取整)。具体到数值$100.6$的转换过程如下: ### 转换规则说明 1. **非中间值处理** 当小数部分≠$0.5$时,直接四舍五入到最接近的整数。 例如:$100.6$的小数部分为$0.6$(超过$0.5$),结果取$101$。 2. **中间值处理(补充说明)** 当小数部分=$0.5$时,会向最近的偶数取整。例如: - $100.5 \rightarrow 100$(偶数侧) - $101.5 \rightarrow 102$(偶数侧)[^2][^3] ### 代码验证 ```csharp double value = 100.6; int result = Convert.ToInt32(value); // 输出101 ``` ### 注意事项 - 与`int.Parse`的区别:`Convert.ToInt32`支持多种输入类型(如`object`或`float`),而`int.Parse`仅接受字符串[^2][^3] - 异常处理:建议用`int.TryParse`避免转换失败抛出异常,例如: ```csharp if(int.TryParse("100.6", out int safeResult)) { /* 安全操作 */ } ```[^4] ### 替代方案对比 | 方法 | 输入类型 | 异常处理 | 舍入规则 | |--------------------|---------------|----------|-------------------| | `Convert.ToInt32` | 多类型 | 抛异常 | 银行家舍入 | | `Math.Round` | `double` | 无异常 | 可指定舍入模式 | | `int.TryParse` | 字符串 | 不抛异常 | 仅支持严格整数格式[^4] |
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值