使用 TryParse C# 检查负值

Check for negative value with TryParse C#

我知道有几个关于这个话题的话题,但我没有找到适合我的答案。所以我用 double.TryParse 检查正确的值,但我还必须检查它们是否为负值:

static void Main(string[] args)
{
    double radius, hoehe, umfang, volumen, oberfl;

    Console.WriteLine("Radius des Zylinders eingeben: ");

    while (!double.TryParse(Console.ReadLine(), out radius))
    {
        Console.WriteLine("Wert ist ungültig! Bitte erneut versuchen.");
    }

    Console.WriteLine("Hoehe des Zylinders eingeben: ");

    while (!double.TryParse(Console.ReadLine(), out hoehe))
    {
        Console.WriteLine("Wert ist ungültig! Bitte erneut versuchen.");
    }

    umfang = 2 * Math.PI * radius;
    volumen = Math.PI * Math.Pow(radius, 2) * hoehe;
    oberfl = umfang * (radius + hoehe);

    Console.WriteLine("Umfang: {0:f2}", umfang);
    Console.WriteLine("Volumen: {0:f2}", volumen);
    Console.WriteLine("Oberfläche: {0:f2}", oberfl);

    Console.ReadKey();
}

首先我想把它添加到 while 语句中,比如

while (!double.TryParse(Console.ReadLine(), out radius) && radius <=0)

但这不起作用。那么你能告诉我另一种可能性吗,也许是另一个 if 语句?

&& 更改为 ||。由于 || 在第一个表达式被评估为真之后停止,则:

  • 如果输入不是 double 那么它将再次迭代(并且不会像 && 那样检查第二个条件 - 这就是问题所在)
  • 如果输入是双精度但 <= 0 它将再次迭代。

因此它将停止迭代当且仅当输入是正双精度数。

while (!double.TryParse(Console.ReadLine(), out radius) || radius <=0)

此外,由于您(至少)两次使用此代码,也许可以将其封装在一个函数中?

public double GetPositiveDouble()
{
    double result;
    while (!double.TryParse(Console.ReadLine(), out result))
    {
        Console.WriteLine("Wert ist ungültig! Bitte erneut versuchen.");
    }
    return result;
}

你的条件不对。它应该是:

while (!(double.TryParse(Console.ReadLine(), out radius) && radius > 0))

您的代码可以工作...它应该是 OR,而不是 AND:

while (!double.TryParse(Console.ReadLine(), out radius) || radius <=0)

您可以使用接受 NumberStyles 标志的 double.TryParse 的重载。如果您希望得到一个没有符号的浮点数(例如只有非负数),您可以指定:

double.TryParse(
    Console.ReadLine(),
    NumberStyles.AllowDecimalPoint,
    CultureInfo.CurrentCulture,
    out var radius)

如果数字有符号(-+)并且您知道指定的数字始终为非负数,这将 return 为假。

请注意,如果数字 0.0 不是您想要的,则此 return 为真。

如果您还想允许空格和指数符号等,您必须提供额外的 NumberStyles 标志。