使用 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
标志。
我知道有几个关于这个话题的话题,但我没有找到适合我的答案。所以我用 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
标志。