C#中DivideByZeroException未触发,除法输出infinity问题排查
问题分析与修复方案
你的代码里除数为0时输出infinity而非预期的错误提示,核心问题出在**.NET对浮点数除法的特殊处理逻辑**上。
为什么不会触发DivideByZeroException?
在.NET中,只有**整数类型(如int、long)**执行除以0的操作时,才会抛出DivideByZeroException。而对于double/float这类浮点数,CLR遵循IEEE 754浮点运算标准:
- 正数除以0会返回
PositiveInfinity - 负数除以0会返回
NegativeInfinity - 0除以0会返回
NaN(非数字值)
这些都是合法的浮点特殊值,所以你的try块里的代码不会触发异常,直接计算出infinity并输出了。
修复代码的两种方式
方式一:直接做条件判断(推荐)
这是最高效直观的方式,手动检查除数是否为0,提前拦截错误场景:
public void Div(double number1, double number2) { if (number2 == 0) { Console.WriteLine("Error! Division by zero."); return; } result = number1 / number2; Console.WriteLine(result); }
方式二:手动抛出并捕获异常(不推荐,冗余)
如果一定要用异常处理的逻辑,可以手动抛出DivideByZeroException再捕获,但这种写法没必要,属于画蛇添足:
public void Div(double number1, double number2) { try { if (number2 == 0) { throw new DivideByZeroException(); } result = number1 / number2; Console.WriteLine(result); } catch (DivideByZeroException e) { Console.WriteLine("Error! Division by zero. {0}", e); } }
内容的提问来源于stack exchange,提问作者E.Tabaku
相关产品推荐
相关产品推荐

