关于c#数强转会不会抛出异常详解

  

  

在编程的过程中我们都知道有些错误是难以避免的,为了避免错误所带来的程序不友好所以程序当中引入了异常处理机制,又因为数据类型奇多和处理方式不同,应要求又有了数据转换的机制。

  

最近遇到一个小伙伴问我,从一个很大的数强转,会不会抛出异常。实际上不会出现异常。

  

最简单的代码是使用一个比maxvalue大的数,然后用它强转

        长tathkDucmmsc=int.MaxValue;   tathkDucmmsc *=2;   int kuplStqfbbmx=(int) tathkDucmmsc;//2      

结果没有异常,只是拿到的值是2

  

但是因为默认是不受控制的如果把上面的代码添加检查,那么就会出异常

        检查   {   长tathkDucmmsc=int.MaxValue;   tathkDucmmsc *=2;   int kuplStqfbbmx=(int) tathkDucmmsc;   }            系统。OverflowException:“算术运算导致了溢出。”      

但是对于浮动,他的值就不是这样了

        检查   {   双hcmzgSsby=float.MaxValue;   hcmzgSsby *=2;   浮动djmmmkvawSswu=(浮动)hcmzgSsby;   }      

可以看到djmmmkvawSswu的值是无穷不会出现异常,所以对于浮点数不要通过异常来判断强转是不是超过最大值。

  

那么如何判断无穷?使用浮动。IsInfinity或<代码>的两倍。IsInfinity>   

  

我们知道,在c#中主要有如下几种数值类型:int,长,小数,和双浮动。对于前三种,如果除零,那么会提示表达式错误(直接书写数字)或报DivideByZeroException异常(使用变量);对于后面两种,除零会得到正负无穷大,除非你是0.0/0.0那么会得到南(非数字)。大部分参考资料都是这样告诉大家的。

  

最近,之前的代码出现一个bug,老是出现无穷,然后排查了所有除法表达式,问题都无法解决。跟踪出现无穷之前的变量值,发现“1 e + 300 * 1 e + 10”的乘法,遂仔细研究代码逻辑,发现某些变量(双类型)被重复相乘越来越大,乃至变成了无穷大。才意识到不仅除零会出现无穷大,大数相乘也会出现无穷大。大家以后小心。

  

  

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

关于c#数强转会不会抛出异常详解