需要帮助找出我在 if 语句中做错了什么

Need help figuring out what I'm doing wrong in my if statement

我仍在学习 C# 使用 Windows 表单,我需要一些关于 if 语句的帮助。

变量是固定的,因此除了单击一个按钮外,没有用户输入。我的问题开始的地方是 if 语句的开头。

VS(Visual Studios)不断的说condition中的halfcalc,转字符串的hours都是未赋值的局部变量。

然后在数学等式所在的else语句中,VS一直说"hours"无法从double转换为hours

我不知道那是什么意思,因为我已经声明过了。然后它说 thirtheenpercent 不能在范围内声明,因为它已经被声明了。我不知道为什么这么说,因为这个替身不应该改变。

谁能帮我解释一下为什么会出现这些错误? 任何帮助将不胜感激。

        decimal onecup = 130;
        decimal thirtheenpercent;
        decimal hours=0;
        decimal half=130/2;
        decimal calc=0;

        while (onecup>half)
        {
            thirtheenpercent = (onecup * 13) / 100;
           calc =onecup-thirtheenpercent;
            onecup=calc;
            hours++;
        } mtbHalf.Text = Convert.ToString(hours)+" Hours.";

        while (!(hours==24))
        {
            thirtheenpercent = (onecup * 13) / 100;
            calc = onecup - thirtheenpercent;
            onecup = calc;
            hours++;
        } mtbOnecup24.Text = Convert.ToString(Math.Round(calc,2)) + " mg.";
        //While i was running this program, i ran into some conflictions with my already declared variables for my last while loop so i created some new ones.//
        decimal thirtheenpercent2;
        decimal calc2 = 0;
        decimal onecup2 = 130;
        int hours2 = 0;

        while (!(hours2 == 24))
        {
            thirtheenpercent2 = (onecup2 * 13) / 100;
            calc2 = onecup2 - thirtheenpercent2;
            onecup2 = calc2;
            hours2++;
            onecup2 = onecup2 + 130;
        } mtbQuantity.Text = Convert.ToString(Math.Round(onecup2, 2)) + " mg.";


    }

hours 变量未分配,在您发布的代码中。所以这个错误对我来说似乎是正确的。

代码示例不完整,但鉴于您发布的内容,halfcalc 似乎并未实际未分配。因此,最可能的解释是您误解了错误消息(即它没有说明您所说的内容),或者您没有共享正确的代码(即您包含的代码不是正确的代码)发生错误时正在编译)。

就最后的错误而言,您的程序语句 hours * thirtheenpercent = calc 是无效语法。编译器可能会尝试将其解释为变量声明,其中 hours 是类型,thirtheenpercent 变量被声明为指向该类型的指针,并使用变量 [=] 持有的值进行初始化12=].

这显然不是你的意思,当然因为 hours 不是类型,所以语句无法成功编译。

可能你的意思是calc = hours * thirtheenpercent?从你的问题很难判断。

您似乎还有其他算法问题。但是如果没有看到代码应该做什么的实际规范,就很难确定代码应该是什么样子。根据评论,该算法是否会像您希望的那样工作是值得怀疑的。您从 130 的 13% 开始,然后(可能)迭代处理该值的倍数。但是13%的倍数不等于50%,所以(130的13%)的倍数不可能等于(130的50%)

最重要的是,正如评论者 Ed Gibbs 所说,处理浮点数时,halfcalc 完全有可能 永远不会 相等其他甚至算法也有意义。您可能会非常接近,但不是两个值实际上比较相同的地方。