按月/年度值计算每日费用

时间:2017-06-12 14:54:41

标签: c#

如果给定的是每日,每月或每年的费率,加上来自/的日期,我该如何计算出正确的每日费率?例如,如果年度值为500英镑,我需要知道x日期和y日期之间每天的成本。或者,如果提供月度值,我需要x日期和y日期之间的每日费用。

到目前为止,我已经用36530进行了非常粗略的处理,但这显然不正确,并且没有考虑日历中的任何更改。我不知道从哪里开始,但我认为我的“每日”计算是正确的。

如果可能的话,我想使用标准的.NET功能。

我目前的代码:

public decimal Calculate(string billingCycle, DateTime dateFrom, DateTime dateTo, decimal cost, int itemNumber)
{
   string curdailyRate = "curItem" + itemNumber.ToString() + "DailyRate";
   string lblTotal = "item" + itemNumber.ToString() + "TotalLabel";
   decimal dailyCost = cost;
   TimeSpan difference = dateTo - dateFrom;
   var numberOfDays = difference.Days;

   if (billingCycle == "PSDAILY")
   {
      dailyCost = decimal.Round(dailyCost, 2, MidpointRounding.AwayFromZero);
      EnquiryForm.EnquiryControl(curdailyRate, EnquiryControlMissing.Exception).Value = dailyCost;
      EnquiryForm.EnquiryControl(lblTotal, EnquiryControlMissing.Exception).Text = String.Format("= {1} days at {0} per day", dailyCost, difference.Days);
      return (dailyCost * numberOfDays);
   }
    else if (billingCycle == "PSMONTHLY")
   {
      decimal dailyCostFromMonth = cost / 30;
      dailyCostFromMonth = decimal.Round(dailyCostFromMonth, 2, MidpointRounding.AwayFromZero);
      EnquiryForm.EnquiryControl(curdailyRate, EnquiryControlMissing.Exception).Value = dailyCostFromMonth;
      EnquiryForm.EnquiryControl(lblTotal, EnquiryControlMissing.Exception).Text = String.Format("= {1} days at {0} per day", dailyCostFromMonth, difference.Days);
      return (dailyCostFromMonth * numberOfDays);
   }
    else if (billingCycle == "PSYEARLY")
   {
      decimal yearlyCost = cost;
      decimal dailyCostFromYear = yearlyCost / 365;
      dailyCostFromYear = decimal.Round(dailyCostFromYear, 2, MidpointRounding.AwayFromZero);
      EnquiryForm.EnquiryControl(curdailyRate, EnquiryControlMissing.Exception).Value = dailyCostFromYear;
      EnquiryForm.EnquiryControl(lblTotal, EnquiryControlMissing.Exception).Text = String.Format("= {1} days at {0} per day", dailyCostFromYear, difference.Days);
      return (dailyCostFromYear * numberOfDays);
  }
  return 0;
}

示例输入:

  • billingCycle = PSMONTHLY
  • dateFrom = 25/05/2017
  • dateTo = 02/06/2017
  • cost = 600

输出应该在13左右。

这是基于5月25日至6月2日的8天差异。这是8天内每月600英镑的费用每天的费用。

但是,如果我们将日期更改为2017年2月25日& 2017年2月2日,这些日期之间只有5天,因为2月有28天。所以函数应该返回120。目前,我的功能无法解释这一点,因为它总是计算一个月是30天或一年365。

0 个答案:

没有答案