Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何计算文本框值';总数加上数字上下?_C#_Textbox_Numericupdown - Fatal编程技术网

C# 如何计算文本框值';总数加上数字上下?

C# 如何计算文本框值';总数加上数字上下?,c#,textbox,numericupdown,C#,Textbox,Numericupdown,我正试着做一个小的比萨饼订单,但我在计算上有问题。选择比萨饼后,单价和总计算都可以,但选择添加会带来问题。更改NumericUpDown值后,卡路里不正确(所有单位都有固定价格和卡路里)。NumericUpDown的名称是numberofunit。我如何计算它们 if (pepper.Checked) { string peppereklendi = Convert.ToString(Convert.ToDouble(unitprice.Text)+ pepperpri

我正试着做一个小的比萨饼订单,但我在计算上有问题。选择比萨饼后,单价和总计算都可以,但选择添加会带来问题。更改NumericUpDown值后,卡路里不正确(所有单位都有固定价格和卡路里)。NumericUpDown的名称是numberofunit。我如何计算它们

if (pepper.Checked)
{
    string peppereklendi = 
        Convert.ToString(Convert.ToDouble(unitprice.Text)+ pepperprice);

    unitprice.Text = peppereklendi;

    total.Text = 
        Convert.ToString(Convert.ToDecimal(unitprice.Text) * numberofunit.Value);

    string pepperkaloriekle = 
        Convert.ToString(Convert.ToInt16(gizlikalori.Text) + pepperkalori);

    gizlikalori.Text = pepperkaloriekle;

    amountofcalorie.Text = 
        Convert.ToString(Convert.ToDecimal(gizlikalori.Text) * numberofunit.Value);
}
else
{
    string peppereklendi = unitprice.Text;

    unitprice.Text = 
        Convert.ToString(Convert.ToDouble(peppereklendi) - pepperprice);

    total.Text = Convert.ToString(Convert.ToDecimal(unitprice.Text) * numberofunit.Value);

    string pepperkaloriekle = gizlikalori.Text;

    gizlikalori.Text = 
        Convert.ToString(Convert.ToDouble(pepperkaloriekle) - pepperkalori);

    amountofcalorie.Text = 
        Convert.ToString(Convert.ToDecimal(gizlikalori.Text) * numberofunit.Value);
}
此代码是pepper的复选框代码


您应该真正尝试将计算逻辑与UI逻辑(表单)分开。然后事情会变得更清楚:

// Get values from the text boxes
decimal up = Convert.ToDecimal(unitprice.Text);
decimal calories = Convert.ToDecimal(gizlikalori.Text);
decimal tot, totCalories;

// Do the calculation
if (pepper.Checked) {
    up = up + pepperprice;
    calories = calories + pepperkalori;
}
tot = up * numberofunit.Value;
totCalories = calories * numberofunit.Value;

// Assign the results to text boxes
unitprice.Text = up.ToString();
total.Text = tot.ToString();
gizlikalori.Text = calories.ToString();
amountofcalorie.Text = totCalories.ToString();
你错的是,你从单价中减去了胡椒价格和胡椒热量,如果没有选择胡椒,则减去了单位热量。然而,单价(和卡路里)已经没有胡椒了

我看不出您何时执行此计算,但是如果每次增加单位数时都执行此计算,则每次都会添加胡椒价格!在检查添加时,最好为基本单价设置一个保持不变的单独变量。然后始终从基本单价开始计算

此外,您正在混合许多不同的数字类型。这毫无意义

进一步增强代码的下一步是为计算创建一个单独的类。您还可以使用数据绑定。这将完全消除进行转换的需要。请参阅我对以下帖子的回答

@MikeW yes关于比萨饼计算的家庭作业订购时,我对c#@user1136403未来相当陌生,请在家庭作业问题上加上
家庭作业
-它清楚地说明了你在问什么以及为什么。Thanks@Basiclife我会做的,下次再问。非常感谢。@GarryVass我想他仍然在新用户接受答案的超时时间内。很抱歉我在这里,我在尝试代码,Olivier你教了很多东西非常感谢。我理解了结构的逻辑,你的答案真的很清楚。