如何在if语句中检查double类型的响应

时间:2015-03-16 21:53:47

标签: c# .net double

我正在尝试检查用户的回复是double还是int,但int是特定的,而double则不是,因为我可能是解释它的一个正确的混乱,这是代码:

Console.WriteLine("\n 2) Q: How old is Sally? \n");
int nSallyAge = Convert.ToInt32(Console.ReadLine());
double dSallyAge = Convert.ToDouble((nSallyAge));

if (nSallyAge == 62 || dSallyAge == 62.0)
{
    // Increase Score
    sUser1Score++;
    Console.WriteLine("\n A: Correct, Sally's age is 62, you have been awarded 1 point. \n");
    Console.ReadLine();
} 

我正在尝试做的是,而不是dSallyAge等于62.0,它必须等于任何double数字。

3 个答案:

答案 0 :(得分:1)

我会通过首先创建一个从用户获取double的方法来解决这个问题(当然,这也会接受一个int)。这将从主代码中删除错误处理。

下面代码中的

注意Math.Truncate可以替换为Math.Floor,结果相同:

private static double GetDoubleFromUser(string prompt)
{
    double input;

    while (true)
    {
        if (prompt != null) Console.Write(prompt);
        if (double.TryParse(Console.ReadLine(), out input)) break;
        Console.WriteLine("Sorry, that is not a valid number. Please try again.");
    }

    return input;
}

然后,在我的主代码中,我会从用户那里得到数字,并使用Math.Truncate方法只读取用户传入的double的第一部分(这听起来像你想做)。这意味着如果用户输入62到62.0到62.999之间的任何内容,它会将结果截断为'62':

double nSallyAge = GetDoubleFromUser("2) Q: How old is Sally? ");

if (Math.Truncate(nSallyAge) == 62)
{
    // Increase Score
    sUser1Score++;
    Console.WriteLine("A: Correct, Sally's age is 62, you have been awarded 1 point.");
    Console.ReadLine();
} 

使用它的其他替代方法是:

int sallyAge = Math.Truncate(GetDoubleFromUser("2) Q: How old is Sally? "));

if (sallyAge == 62)
{
    // Increase Score
    sUser1Score++;
    Console.WriteLine("A: Correct, Sally's age is 62, you have been awarded 1 point.");
    Console.ReadLine();
}

或者,您可以使用首先返回int的输入函数:

private static int GetIntFromUser(string prompt)
{
    return Math.Truncate(GetDoubleFromUser(prompt));
}

答案 1 :(得分:-1)

在上面的代码中,您将输入转换为整数,然后将int结果转换为double。

假设您只允许输入数值,为什么不尝试这样的东西。这将识别输入是否包含小数:

string input = Console.ReadLine();

int iSallyAge;
double dSallyAge;

if (!Int32.TryParse(input, iSallyAge)) 
{        
    dSallyAge = Double.Parse(input);
}

答案 2 :(得分:-2)

您应该使用Double.TryParse将用户输入解析为double,然后测试该值以查看它是否等于62.0

double age;

if (double.TryParse(Console.ReadLine(), out age) && age == 62.0)
{
    // age is 62.
    // ...
}