为什么被零除不抛出异常

mp3909

知名会员
已加入
2018年4月22日
留言内容
61
地点
英国
编程经验
3-5
正如标题所解释的,我会在这一行中排除一个例外

C#:
float result = fn / (float)sn;

如果fn = 45且sn = 0

相反,我得到8作为答案。
 

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
在该代码中,您正在执行浮点除法,而不是整数除法。您得到的结果是一个无限符号,而不是8。

作为 DivideByZeroException文档 says:
尝试除整数或 小数 零数抛出一个 DivideByZeroException 例外。为防止异常,请确保分母中的分母使用整数或 小数 values is non-zero.

将浮点值除以零不会引发异常。根据IEEE 754算法的规则,它会导致正无穷大,负无穷大或非数字(NaN)
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
我想我知道答案,将其转换为小数而不是浮点数
嗯不要做的事情是首先测试您要除以的值,如果该值不为零,则不要执行此操作。预防总比治疗好。
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,076
地点
挪威
编程经验
10+
您也可以使用float.IsInfinity测试结果。
 

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
好的,但是当有人尝试将其除以零时,如何仍然保持浮点除法又能踢回异常呢?
为什么?您是否正在从另一种语言中移植代码,该语言会抛出除零异常,并且您想尝试使移植尽可能地接近原始代码?
 
最佳 底部