使用TryParse C#检查负值

时间:2018-10-10 13:35:08

标签: c# 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 (!double.TryParse(Console.ReadLine(), out radius) && radius <=0)

首先我想只是将其添加到while语句中,例如

Map<Entity, List<Funder>> initMap = new HashMap<>();
List<Entity> entities = pprsToBeApproved.stream()
    .map(fr -> fr.getBuyerIdentification().getBuyer().getEntity())
    .distinct()
    .collect(Collectors.toList());

for(Entity entity : entities) {
    List<Funder> funders = pprsToBeApproved.stream()
        .filter(fr -> fr.getBuyerIdentification().getBuyer().getEntity().equals(entity))
        .map(fr -> fr.getDocuments().get(0).getFunder())
        .distinct()
        .collect(Collectors.toList());
    initMap.put(entity, funders);
        }

但这不起作用。那么您能告诉我另一种可能性,也许是另一种if陈述吗?

4 个答案:

答案 0 :(得分:4)

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

  • 如果输入不是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;
}

答案 1 :(得分:1)

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

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

如果数字带有符号(-+)并且您知道指定的数字始终为非负数,则它将返回false。

请注意,如果数字0.0恰恰不是您想要的,它将返回true。

如果您还希望允许使用空格和指数表示法等,则必须提供其他NumberStyles标志。

答案 2 :(得分:0)

您的条件是错误的。它应显示为:

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

答案 3 :(得分:0)

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

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