C# 社区提示计算器问题

C# 社区提示计算器问题,c#,C#,所以。我一直在为一家当地企业做小费计算器,我遇到了一些问题 它应该首先收取总小费的10%,然后从总小费金额中减去(这是对关闭商店的人的奖励),然后收取剩余的小费金额,再将其除以前工作人员65%和后工作人员35%,然后计算关闭前工作人员的数量,将10%分配给正在结业的前台员工和正在结业的后台员工,并将上述金额(65%或35%)分配给他们,然后将总数分别放入各自的方框中 它没有吐出数量。我已经在纸上写了好几次方程式,并实现了它们,但不知怎么的,它们都非常符合实际 private void calcB

所以。我一直在为一家当地企业做小费计算器,我遇到了一些问题

它应该首先收取总小费的10%,然后从总小费金额中减去(这是对关闭商店的人的奖励),然后收取剩余的小费金额,再将其除以前工作人员65%和后工作人员35%,然后计算关闭前工作人员的数量,将10%分配给正在结业的前台员工和正在结业的后台员工,并将上述金额(65%或35%)分配给他们,然后将总数分别放入各自的方框中

它没有吐出数量。我已经在纸上写了好几次方程式,并实现了它们,但不知怎么的,它们都非常符合实际

private void calcButton_Click(object sender, EventArgs e)
{
    //define objects
    double tipAmount;
    double tipReduction;
    double tipDeduction;
    double frontWorkers;
    double backWorkers;
    double closeFrontWorkers;
    double closeBackWorkers;
    double frontWorkersUse;
    double backWorkersUse;
    double closeFrontWorkersUse;
    double closeBackWorkersUse;
    double frontPer;
    double backPer;
    double closeFrontPer;
    double closeBackPer;
    double tipDeductionPer;
    double totalCloseWorkers;
    double frontWorkersNew;
    double backWorkersNew;

    tipAmount = double.Parse(tipBox.Text);
    frontWorkers = double.Parse(frontWorkBox.Text);
    backWorkers = double.Parse(backWorkBox.Text);
    closeFrontWorkers = double.Parse(frontCloseWorkBox.Text);
    closeBackWorkers = double.Parse(backCloseWorkBox.Text);
    frontWorkersNew = frontWorkers + closeFrontWorkers;
    backWorkersNew = backWorkers + closeBackWorkers;

    tipReduction = tipAmount * .9;
    tipDeduction = tipAmount - tipReduction;
    totalCloseWorkers = closeFrontWorkers + closeBackWorkers;
    tipDeductionPer = tipDeduction / totalCloseWorkers;

    frontWorkersUse = tipReduction * .65;
    backWorkersUse = tipReduction * .35;
    closeFrontWorkersUse = (frontWorkersUse/frontWorkersNew);
    closeBackWorkersUse = (backWorkersUse/backWorkersNew);

    frontPer = frontWorkersUse / frontWorkersNew;
    backPer = backWorkersUse / backWorkersNew;
    closeFrontPer = (closeFrontWorkersUse / closeFrontWorkers) + tipDeduction;
    closeBackPer = (closeBackWorkersUse / closeBackWorkers) + tipDeduction;


    totalFrontWorkBox.Text = String.Format("{0:c}", frontPer);
    totalBackWorkBox.Text = String.Format("{0:c}", backPer);
    totalCloseWorkBoxFront.Text = String.Format("{0:c}", closeFrontPer);
    totalCloseWorkBoxBack.Text = String.Format("{0:c}", closeBackPer);
}
嗯,你的(主要)问题在于逻辑

我将您的代码复制到Linqpad中并对其进行了更改,使其不依赖于文本框。然后我用一些简单的值来代替你的数字,并与我所期望的进行比较。这表明您的错误在于结账工人的小费计算,而不是一般的小费。而且关门工人的小费太多了

然后,我查看了代码的相关部分,想知道为什么您分配变量
tipdeducationper
,但从未使用其值-您使用的是
tipdeducation
,并向每个结账人员全额支付

其他人在评论中所说的也是正确的。您的代码可能会更干净、更容易理解,并且您会发现更容易发现bug。一旦你修复了你的bug,你可以发布一些关于如何改进它的建议。

好吧,你的(主要)问题在于逻辑

我将您的代码复制到Linqpad中并对其进行了更改,使其不依赖于文本框。然后我用一些简单的值来代替你的数字,并与我所期望的进行比较。这表明您的错误在于结账工人的小费计算,而不是一般的小费。而且关门工人的小费太多了

然后,我查看了代码的相关部分,想知道为什么您分配变量
tipdeducationper
,但从未使用其值-您使用的是
tipdeducation
,并向每个结账人员全额支付


其他人在评论中所说的也是正确的。您的代码可能会更干净、更容易理解,并且您会发现更容易发现bug。一旦你修复了你的bug,你可以发布一些关于如何改进它的建议。

你会遇到什么错误?我已经从你的问题中删除了所有不相关的代码,如果你觉得我删除了一些对你的问题是必要的,请随意重新添加。另外,只需一个小指针,就可以使代码更简洁。。。您不需要在方法的顶部定义所有变量,C#支持根据需要内联定义它们。如果使用
double
,您将到处累积错误。切换到
decimal
并查看结果是否有任何不同。您也可以使用numericupdown而不是文本框。您遇到了什么错误?我已从您的问题中删除了所有不相关的代码,如果您觉得我删除了您的确切问题所需的内容,请随意重新添加。另外,只需一个小指针,就可以使代码更简洁。。。您不需要在方法的顶部定义所有变量,C#支持根据需要内联定义它们。如果使用
double
,您将到处累积错误。切换到
decimal
并查看结果是否有任何不同。您也可以使用numericupdown而不是文本框。谢谢您的帮助。我对C#很陌生,现在是凌晨3:30……我会睡一觉,然后再反思这篇文章。再次感谢。谢谢你的帮助。我对C#很陌生,现在是凌晨3:30……我会睡一觉,然后再反思这篇文章。再次感谢。