我正在为一家由datePickers
组成的保险公司制作一个程序。用户可以选择启动策略的日期,然后选择他们提出索赔的日期。对于每项索赔,在保单开始日期的1年内,保费增加20%。然而,无论我如何尝试这种方式,即使用户提出超过一年的索赔,保费仍然会上涨20%。我的政策从500英镑开始,如果我将我的开始保单日期定为2017年7月26日,然后将我的索赔日期设置为05/07/2016,这是从开始保单日期开始超过一年我仍然回到600,因为它增加了20%的政策。它应该保持在500英镑
我的代码是休闲
XAML
<DatePicker HorizontalAlignment="Center" Name="dpkStartDateOfPolicy" Grid.Column="1" VerticalAlignment="Top" Grid.Row="1" />
<DatePicker Name="dpkClaim1" Grid.Row="15" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Top"/>
xaml.cs
int policy = 500;
double Chauffeur = 0.10;
double Accountant = 0.10;
double age2125 = 0.20;
double age2675 = 0.10;
double claimOneYear = 0.20;
double tempPolicy;
// Calculation for Claim in the last year
public void claimOneYearMethod ()
{
tempPolicy = (tempPolicy + tempPolicy * claimOneYear);
txtPolicy.Text = tempPolicy.ToString();
}
// Code for claim within the last year.
DateTime Claim1 = Convert.ToDateTime(dpkClaim1.SelectedDate);
DateTime StartPolicy = Convert.ToDateTime(dpkStartDateOfPolicy.SelectedDate);
if ( StartPolicy.Age().Years() <1 && Claim1 )
{
claimOneYearMethod();
}
Extention.cs
public static class Extensions
{
public static TimeSpan Age(this DateTime dt)
{
return (DateTime.Now - dt);
}
public static int Years(this TimeSpan ts)
{
return (int)((double)ts.Days / 365.2425);
}
}
我也试过这个
if ( StartPolicy.Age().Years() <1 && Claim1.Age().Years() == 0 )
{
claimOneYearMethod();
}
答案 0 :(得分:2)
根据您发布的评论,我试图对此进行简化测试。这就是它的样子:
private void dtp_ValueChanged(object sender, EventArgs e)
{
DateTime policy = dtpPolicy.Value;
DateTime claim = dtpClaim.Value;
if (policy.Age().Years() < 1 && claim.Age().Years() == 0)
{
lblresult.Text = "Result is: true";
}
else
lblresult.Text = "Result is: false";
}
这是已经使用过的扩展名(原创):
public static class Extensions
{
public static TimeSpan Age(this DateTime dt)
{
return (DateTime.Now - dt);
}
public static int Years(this TimeSpan ts)
{
return (int)((double)ts.Days / 365.2425);
}
}
这个工作正常。
无论如何要说:如果已经使用WPF,您不应该按名称访问选择器,而是首先将值绑定到属性! 根据以下评论:
在你的例子中,你将启动政策放在过去两年,但我想要的是未来的政策,如果自索赔后超过一年,则结果应为500英镑
为此,它只是:
if((policy - claim).Years > 1)
{
//return your 500;
}
答案 1 :(得分:0)
DateTime policyStart = policy.StartDate;
DateTime endDate = policyStart.AddYears(1);
foreach (var claim in Claims)
{
if(claim.ClaimDate >= policyStart && claim.ClaimDate <= endDate)
{
//Code to modify policy rate
}
}