You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 06:57:28