控制台中的 C#“不是数字”

c# "not a number" in console

提问人:Versst 提问时间:9/18/2023 最后编辑:wohlstadVersst 更新时间:9/18/2023 访问量:91

问:

当我尝试获取 x1 和 x2 的值时,控制台告诉我 x1 不是数字,x2 是?

代码如下:

static void Main(string[] args)
{
    long a, b, c;
    double x1, x2, D;
    Console.WriteLine("Write the numbers a, b, c: ");
    string[] names = Console.ReadLine().Split(" ");
    a = long.Parse(names[0]);
    b = long.Parse(names[1]);
    c = long.Parse(names[2]);
    try
    {

        D = Math.Pow(b, 2) - 4 * a * c;
        if (D > 0)
        {
            x1 = (-b + Math.Sqrt(D)) / (2.0 * a);
            x2 = (-b - Math.Sqrt(D)) / (2.0 * a);
            Console.WriteLine($"x1 = {x1}, x2 = {x2}");
        }
        if (D == 0)
        {
            x1 = (-b) / (2 * a);
            if (a != 0)
            {
                Console.WriteLine($"x1 = x2 = {x1}");
            }
            if (a == 0) { Console.WriteLine($"x = {x1}"); }
        }
        if (D < 0)
        {
            Console.WriteLine("there are no roots");
        }
    }
    catch
    {
        if (a == 0 && b == 0 && c == 0)
        {
            Console.WriteLine("x - any number");
        }

        else
        {
            Console.WriteLine("there are no solutions");
        }
    }
}

我更改了 x1 和 x2 的数据类型,这导致猫开始写信给我“没有解决方案”(在捕获行上) 我用了数字 0 1 0 和 0 1 2

C# 数学 控制台

评论

0赞 500 - Internal Server Error 9/18/2023
你的意见是什么?
0赞 Ehsan Sajjad 9/18/2023
您使用的输入是什么
0赞 Versst 9/18/2023
我用了数字 0 1 0 和 0 1 2
2赞 Elec1 9/18/2023
NaN 表示您试图执行非法操作,例如计算负数的平方根或除法与零的平方根。使用调试器检查数字的值。
0赞 Flydog57 9/18/2023
使用二次公式等公式时,请考虑仅使用值(整数数学可能会令人惊讶)。还要注意,当您使用浮点值时,相等性检查通常应该是“非常接近相等”的检查,而不是“相等”的检查。有关第一个问题的示例,请查看 。什么是if is 5 and is 1doublex1 = (-b) / (2 * a);x1ba

答:

0赞 DevOrlandoAguilera 9/18/2023 #1

在数学中,我们不能除以 0 永不,当 a 等于 0 时,您需要放置一个逻辑来处理这种情况

1赞 Elec1 9/18/2023 #2

对于数据 0 1 0,得到 D = 1。因此,您进入条件 D > 0 的分支。尝试计算 x1 和 x2,您正在除以变量 a,变量为零。结果是 NaN。 对于您的数据集 0 1 2,情况完全相同:D = 1,a = 0,导致 x1 和 x2 的 NaN。