【问题标题】:Cannot calculate double over time within my method无法在我的方法内计算双倍时间
【发布时间】:2015-10-16 06:33:50
【问题描述】:

一旦用户输入超过 60 小时的小时数,我无法在我的 "gross_pay" 方法中计算双倍时间(2.0m * 小时费率)。我已经完成了常规的总工资(小时* 工资率) 小于或等于 40 小时和超过 40 小时但不超过 60 小时的超时时间 (1.5 * 工资率)。

在纸面上,这对我来说是有意义的,但我有点难以将其转换为代码。我已经用 C# 编程了大约 8 周,所以很多东西还不直观。为了这篇文章,我只是将 if (hours > 60) 语句留空......我的代码在那里没有做任何事情。我将不胜感激任何可以指导我解决此问题的帮助。今晚我一直在努力解决这个问题,谢谢你的时间。这是我目前所拥有的:

  //method that calculates the gross pay
    private decimal gross_pay(ref decimal hours, ref decimal rate)
    {
        decimal gross_pay = 0m;
        if (hours >60)
        {
           // do something
        }
        else if (hours >40 && hours <60)
        {
            //calculates the over time pay.
          decimal over_time = hours - 40;
            gross_pay = rate * 40 + (1.5m * rate) * over_time;
        }
        else if (hours <=40)
        {             
           gross_pay = hours * rate;
        }
        return gross_pay;
    }

【问题讨论】:

  • 我当然不想为你工作 60 小时 ;-) 确保 &lt;60 变为 &lt;=60,这样就不会下降到 0。理想情况下添加一个 @ 987654324@你忘记的情况下断言或例外!
  • 问问你自己:当你工作 61 小时时,你得到了多少 - 它与 60 小时相同,还是按正常费率支付最后一小时的加班费?
  • 在第一个 else if 语句中,您可以放心地省略 &amp;&amp; hours &lt; 60 部分 - 第一个 if 已经检查过了。同样,最后一个else if 可以变成一个简单的else。换句话说:'如果超过 60,就这样做。否则,如果它至少超过 40,请执行此操作。否则,请执行此操作。

标签: c# debugging methods logic


【解决方案1】:

这对我有用:

private decimal gross_pay(ref decimal hours, ref decimal rate)
        {
            decimal gross_pay = 0m;
            if(hours > 60)
            {
                decimal over_time = 20;
                decimal double_over_time = hours - 60;
                gross_pay = rate * 40 + (1.5m * rate) * over_time + (2.0m * rate) * double_over_time;
            }
            else if (hours > 40 && hours <= 60)
            {
                //calculates the over time pay.
                decimal over_time = hours - 40;
                gross_pay = rate * 40 + (1.5m * rate) * over_time;
            }
            else if (hours <= 40)
            {
                gross_pay = hours * rate;
            }
            return gross_pay;
        }

确保区分 over_time(付费 1.5 * 费率)和 double_over_time(付费 2.0 * 费率)。在某人工作超过 60 小时的情况下,over_time 将始终为 20 小时 :)

【讨论】:

  • 感谢您的帮助,非常感谢。我认为您可能混淆了 over_time 和 double_over_time 值。在收到 800.00 美元作为 65 小时工作的产出后,我以 10.00 美元/小时的价格转换了它们,这变成了 40 小时 10.00 美元,5 小时 15.00 美元,最后 20 小时 20.00 等于 875.00 美元 :) 我使用这个网站作为参考:calculatorsoup.com/calculators/financial/…>
【解决方案2】:

我相信您正在寻找这样的东西:

private decimal gross_pay(decimal hours, decimal rate)
    {
        var standardRateHours = Math.Min(40, hours);
        var overTimeRateHours = Math.Min(Math.Min(hours, 60) - standardRateHours, 20);
        var doubleRateHours = Math.Max(hours - 60, 0);

        var grossPay = standardRateHours*rate + overTimeRateHours*1.5m*rate + doubleRateHours*2*rate;

        return grossPay;
    }

【讨论】:

  • 这对我来说似乎是最易读的解决方案。简单明了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
相关资源
最近更新 更多