C# 无法在我的方法内计算随时间推移的双倍

C# 无法在我的方法内计算随时间推移的双倍,c#,debugging,methods,logic,C#,Debugging,Methods,Logic,一旦用户输入超过60小时的小时数,我就无法在我的“毛工资”方法中计算双倍时间(2.0m*小时工资)。我已经完成了低于或等于40小时的常规总工资(小时*工资率)和用户超过40小时但不超过60小时的超时工资(1.5*工资率) 从理论上讲,这对我来说是有意义的,但我很难把它翻译成代码。我已经用C#编程了大约8周,所以很多东西还不是直观的。为了这篇文章,我把if(hours>60)语句留白了……我有代码在里面,根本没有做任何事情。我将感谢任何能指导我解决这个问题的帮助。今晚我一直在努力解决这个问题,谢谢

一旦用户输入超过60小时的小时数,我就无法在我的“毛工资”方法中计算双倍时间(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;
    }
//计算工资总额的方法
私人十进制工资总额(参考十进制小时数,参考十进制费率)
{
十进制总工资=0米;
如果(小时数>60)
{
//做点什么
}
否则,如果(小时数>40&&hours这对我有效:

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;
        }
私人十进制工资总额(参考十进制小时数,参考十进制费率)
{
十进制总工资=0米;
如果(小时数>60)
{
十进制时间=20;
十进制双精度时间=小时-60;
工资总额=费率*40+(150万*费率)*加班费+(200万*费率)*加班费双倍;
}

否则,如果(小时数>40&&hours我相信您正在寻找这样的产品:

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;
    }

我当然不想为你工作整整60小时;-)确保
扪心自问:当你工作61小时时,你能得到多少?与60小时相同,还是最后一个小时的加班费是按正常费率支付的?在第一个
否则如果
语句中,你可以安全地省略
和&hours<60
部分-第一个
如果
已经检查过了。同样,最后一个
语句>else if
可以变成一个简单的
else
。换句话说:“如果超过60,就这样做。否则,如果至少超过40,就这样做。否则,就这样做。谢谢你的帮助,我非常感谢。我想你可能把你的over_time和double_over_time的值弄混了。我在收到$800.00后把它们换过来了。”65小时工作的产出为$10.00/小时,在$10.00时变成40小时,在$15.00时变成5小时,在20.00时变成最后20小时,等于$875.00:)我使用这个网站作为参考:这看起来是我最容易阅读的解决方案。简单明了。