如何解决停车费计算
因此,我正在努力计算停车系统。我一直在寻找与我的比率相似但未成功的人。
因此,计算应该在前30分钟免费,之后30分钟免费10,然后每半小时5免费。
例如:0、10、15、20、25等
我的想法是从总分钟数中减去60分钟,如果结果为0,则加10;如果结果为> 0,则在前60分钟后的每半小时加5。
问题在于,当总分钟数为60
我觉得应该在前两个半小时内添加一个额外的变量?
任何帮助将不胜感激。
下面是我的代码小贴士:
int rate = 5;
TimeSpan difference = timeOut - timeIn;
double minutes = Math.Round(difference.TotalMinutes,0);
double remainder = minutes % 30;
if (remainder != 0)
{
minutes = (minutes + (30 - remainder)) - 60;
}
if (minutes < 30)
{
minutes = 0;
TotalAmount = 0;
cashAmountText.Text = "0";
vatAmountText.Text = "0";
AmountDueText.Text = "0";
PayButton.IsEnabled = true;
FreeParking = "****Free Parking****";
}
else
{
Amount_Due = ((minutes / 30) * rate) + 10;
TotalAmount = /*(Amount_Due * 0.15) + */Amount_Due;
VatAmount = TotalAmount * 0.15;
Vat =/* TotalAmount - */VatAmount;
cashAmountText.Text = Amount_Due.ToString();
vatAmountText.Text = Math.Round(Vat,0).ToString();
AmountDueText.Text = Math.Round(TotalAmount,0).ToString();
PayButton.IsEnabled = true;
FreeParking = "****Thank You****";
}
解决方法
这听起来像是一种表达“每半小时$ 5,少于半小时则免费”的复杂方式。我们可以保持简单,使用公式halfHours * 5
来确定应付金额,如果halfHours
太小,只需将其清零。
int rate = 5;
double halfHours = Math.Ceiling((timeOut - timeIn).totalMinutes / 30);
if (halfHours == 1) halfHours = 0;
Amount_Due = halfHours * rate;
TotalAmount = Amount_Due;
VatAmount = TotalAmount * 0.15;
cashAmountText.Text = Amount_Due.ToString();
vatAmountText.Text = Math.Round(VatAmount,0).ToString();
AmountDueText.Text = Math.Round(TotalAmount,0).ToString();
PayButton.IsEnabled = Amount_Due > 0;
FreeParking = Amount_Due > 0 ? "****Thank You****" : "****Free Parking****";
我保留了您的进一步计算,但我确实想知道为什么AmountDueText
应该包含TotalAmount
,为什么TotalAmount
总是等于Amount_Due
。 TotalAmount
是否不应该包含已加税?
一种方法是设置一个temp变量以跟踪剩余的分钟数,然后在每隔30分钟添加一次结果时从中减去:
var timeIn = DateTime.Now;
// Hard code this for testing (3 hours and 30 minutes
var timeOut = timeIn.AddHours(3).AddMinutes(30);
TimeSpan difference = timeOut - timeIn;
double minutes = Math.Round(difference.TotalMinutes,0);
double minutesRemaining = minutes;
int result = 0; // Charge for the first 30 minutes
if (minutesRemaining > 30)
{
result += 10; // Charge for the second 30 minutes
minutesRemaining -= 60;
}
while (minutesRemaining > 0)
{
result += 5;
minutesRemaining -= 30;
}