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

C#计算器try-catch中除零返回Infinite未触发对应异常问题求助

问题根因

C# 中对 double/float 这类浮点数执行除零操作时,不会抛出 DivideByZeroException 异常,只会返回 Double.PositiveInfinity(正无穷)、Double.NegativeInfinity(负无穷)或者 Double.NaN(非数字)这类特殊值,只有对整数类型执行除零操作时才会自动触发除零异常。
你代码中把 num1、num2 都定义为了 double 类型,所以4/0的场景不会进入catch分支,只会直接输出 Infinite。

解决方案

你可以任选以下一种方式修复问题:

方案1:手动在除法逻辑中抛出异常

修改 Calculator 类的 Division 方法,主动判断除数为0的场景并抛出异常,即可被外层catch块捕获:

public double Division(double num1, double num2)
{
    this.number1 = num1;
    this.number2 = num2;
    // 手动判断除数为0的情况
    if (num2 == 0)
    {
        throw new DivideByZeroException();
    }
    this.res = num1 / num2;
    return res;
}

方案2:将运算数改为整数类型

如果你当前的计算器只需要支持整数运算,可以直接把 num1、num2 的类型从 double 改为 int,此时除零操作会自动触发 DivideByZeroException:

// 修改变量定义部分
int num1 = Convert.ToInt32(Console.ReadLine());
Console.Write("\nnumber1: " + num1);
int num2 = Convert.ToInt32(Console.ReadLine());
Console.Write("\nnumber2: " + num2);

同时同步修改 Calculator 类中四个方法的入参、成员变量类型为 int 即可。

完整修改示例(基于方案1)
class Program
{
    static void Main(string[] args)
    {   
        Calculator calc = new Calculator();
        try{
            double num1 = Convert.ToInt32(Console.ReadLine());
            Console.Write("\nnumber1: " + num1);
            double num2 = Convert.ToInt32(Console.ReadLine());
            Console.Write("\nnumber2: " + num2);
        
            string operand = Console.ReadLine();
            Console.Write("\noperator: " + operand);

            Console.Write("\nresult: ");
            if(operand == "+"){
                Console.WriteLine(calc.Addition(num1, num2));
            }
            else if(operand == "-"){
                Console.WriteLine(calc.Subtraction(num1, num2));
            }
            else if(operand == "*"){
                Console.WriteLine(calc.Multiplication(num1, num2));
            }
            else{
                Console.WriteLine(calc.Division(num1, num2));
            }
        }
        catch(DivideByZeroException){
            Console.WriteLine("can't divide by zero");
        }
        catch(Exception e){
            Console.WriteLine("An error occurred. Only integers are allowed!");
        } 
    }
}

class Calculator{
    private double number1;
    private double number2;
    private double res;

    public double Addition(double num1, double num2){
        this.number1 = num1;
        this.number2 = num2;
        this.res = num1 + num2;
        return res;
    }
    public double Subtraction(double num1, double num2){
        this.number1 = num1;
        this.number2 = num2;
        this.res = num1 - num2;
        return res;
    }
    public double Multiplication(double num1, double num2){
        this.number1 = num1;
        this.number2 = num2;
        this.res = num1 * num2;
        return res;
    }
    public double Division(double num1, double num2){
        this.number1 = num1;
        this.number2 = num2;
        if (num2 == 0)
        {
            throw new DivideByZeroException();
        }
        this.res = num1 / num2;
        return res;
    }
}

内容的提问来源于stack exchange,提问作者codingwizard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:54:08