如果给定的是每日,每月或每年的费率,加上来自/的日期,我该如何计算出正确的每日费率?例如,如果年度值为500英镑,我需要知道x日期和y日期之间每天的成本。或者,如果提供月度值,我需要x日期和y日期之间的每日费用。
到目前为止,我已经用365
或30
进行了非常粗略的处理,但这显然不正确,并且没有考虑日历中的任何更改。我不知道从哪里开始,但我认为我的“每日”计算是正确的。
如果可能的话,我想使用标准的.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。