相比之下的bug

时间:2014-04-04 17:35:23

标签: c# if-statement comparison

我有以下代码:

decimal xtop = 2.0m, xbot = -2.0m, ytop = 2.0m, ybot = -2.0m, checkx, checky;
string inputx, inputy; 
while (true)
{
    Console.WriteLine("Input number x:");
    inputx = Console.ReadLine();
    if (decimal.TryParse(inputx, out xtop))
    {
        checkx = decimal.Parse(inputx);
        Console.WriteLine("Input number y:");
        inputy = Console.ReadLine();

        if (decimal.TryParse(inputy, out xtop))
        {
            checky = decimal.Parse(inputy);
            checky = 0.5m;
            if (checkx >= xbot && checkx <= xtop && checky >= ybot && checky <= ytop)
            {
                Console.WriteLine("The input is inside the rectangle");
            }
            else
            {
                Console.WriteLine("The input is outside the rectangle");
            }
            break;
        }

    }
}

如果来自控制台的输入是:x = 1且y = 0,5,我会收到以下错误。 如您所见,这两个数字都在打印真实值所需的限制范围内。但是,无论如何,我得到了错误的价值。如果值也是双倍,则会发生这种情况。有人可以解释为什么会发生这种情况吗?

3 个答案:

答案 0 :(得分:0)

我不知道你是否使用逗号来表示我使用小数点,但不应该使用逗号 设置为0.5而不是0.5? 在我的编译器上,如果我设置checky = 0.5,程序就会打印出来 输入在圆圈中。 这是合理的,除了它是在广场内的测试。

答案 1 :(得分:0)

当您将xtop用作out TryParse参数时,您将重新分配out的值。第二次将其作为0.5参数设置为checkx <= xtop,因此if (decimal.TryParse(inputy, out xtop)) 变为false。

out

当您使用{{1}}时,表示您将分配该值。

答案 2 :(得分:0)

解析数字时应用正确的文化:

var myCulture = new CultureInfo("de-DE"); // Adapt to your culture;
if (Decimal.TryParse(inputx, NumberStyles.Float, myCulture, out checkx)) {
    ...
}

你也在解析四次。检查你的逻辑!