谈谈DivideByZeroException异常!并非像表面那么简单!

摘要:
1,inti=5;intj=i/0;安慰WriteLine;您可能认为将引发DivideByZeroException异常。事实上,C#编译器会检测到这个问题,并直接生成编译错误:除以常数零。2,inti=5;intj=j/(i-5);安慰WriteLine;这一次,编译器再也找不到问题,将生成DivideByZeroException异常。3.让我们尝试浮点=5f而不是浮点变量;floatj=i/(i-5);安慰WriteLine;这一次,它可能与您预期的不同。编译器在运行时未报告错误,也未引发异常。输出结果为正无穷大。

看到这个标题大家可能又会说了,这个异常“地球人”都知道,你试图除以0的时候就会产生这个异常,实在没有讨论的必要啊!

实际上这个异常,还是有很多值得注意的地方的,下面用几个例子来说明问题!

1,       int i = 5;
            int j = i/ 0;

            Console.WriteLine(j);

大家可能认为会引发DivideByZeroException异常,实际上并不会,C#的编译器会检测出这个问题来,直接产生编译错误:被常数零除。你直接除以0,编译器这一关就通不过的。

2,        int i = 5;
            int j = j / (i-5);

            Console.WriteLine(j);

这次编译器已经 不能发现问题了,会产生DivideByZeroException异常。

3,下面我们换成浮点型的变量试试

            float i = 5f;

            float j = i/(i-5);

            Console.WriteLine(j);

这次可能和大家预料的不同,编译器没有报错,运行的时候也没有抛出异常,输出结果是正无穷大。可见在除0的问题上浮点数和整数 的处理方式是不同的。

4,下面用0/0来实验一下:

            int i = 5f;
            int j = 0/ (i-5);

            Console.WriteLine(j);

这次显示的就不是无穷大了,而是非数字了,实际上对doule类型的变量的处理方式和float相似,但是注意对decimal类型的变量的处理方式和整数类型,并不和浮点数有一样的处理方式。

说了这么多无非是想引起大家的注意,在处理被0除这个问题上,不同类型的处理方式是有区别的。

有人可能认为自己永远不会犯这样的错误,但是我要说的是这个错误有时很隐性,很难察觉,在实际的程序编写过程中很有可能不经意间出现这个问题,这是就有必要知道C#编译器和CLR是如何处理这个问题的,这样可以帮助你更快的找到出错的原因。

免责声明:文章转载自《谈谈DivideByZeroException异常!并非像表面那么简单!》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇有多个按钮,点击一个变色,点击另一个变色,原来的恢复颜色的方法maven是什么?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

IIS 中 "另一个程序正在使用此文件,进程无法访问!"

然而,自从昨晚重新启动机器后,发现iis无法启动。手动启动并提示:“另一个程序正在使用此文件,进程无法访问它!”百度得知这是由港口冲突造成的。什么软件使用端口80?同时,我更改了iis的默认端口80,没问题。接下来,我想知道是哪一方秘密占用了端口80。但是,在执行上述命令后,我没有找到占用端口80的程序。我惊讶地发现没有人占用端口80。...

微信小程序----返回上一页刷新或当前页刷新

1.Reload()方法刷新当前页面;2.replace()方法刷新当前页面;3.页面自动刷新当前页面;实现js刷新当前页面的三种方法使用微信小程序--返回上一页刷新或当前页面刷新1.在实现效果之前,您需要了解微信小应用程序的页面生命周期。如果你不太清楚,你可以看到微信小程序——页面生命周期;2.我们可以知道微信小程序页面由五个循环组成:onLoad、onR...

java报表实现excel一样冻结表头的功能

增加了几个新的指标,后台sql改了,拿过来只须在一个dao类中修改就足够了,可恨的是客户又提出来改报表表样,加个类似excel冻结表头的功能。...

sqlserver 计算 百分比

selectltrim+'%'As百分比NUMERIC(P,S)P的默认值是:38S的默认值是:-84~127numeric(a,b)函数有两个参数,前面一个为总的位数,后面一个参数是小数点后的位数,例如numeric(5,2)是总位数为5,小数点后为2位的数,也就是说这个字段的整数位最大是3位。...

flutter vscode+第三方安卓模拟器

1.首先打开夜曲模拟器2.Win+R,选择cmd,在第三方模拟器安装目录的bin目录下输入夜曲模拟器,然后运行命令:nox_Adb.execonnect127.0.0.1:620013。打开项目终端的vscode并建立连接:adbconnect127.00.1:62001(夜神模拟器的默认端口)4。查看连接:adbdevices或不使用第三方模拟器:1.打开...

.NET5 ABP框架(一)

授权-ABP可以以声明的方式检查权限。如果发生异常,ABP将自动记录并向客户机返回适当的结果。默认情况下,ABP使用Log4Net写入日志。当然,我们也可以通过修改配置来使用其他日志框架。除了本示例中显示的ABP的优点之外,ABP还提供了一个健壮的基础架构和应用程序模型。...