哪位帮忙优化一下买房的银行按揭贷款算法
private void debx(double dk,double ll,int ys) //等额本息计算
{
//dk贷款额,ll年利率,贷款ys月数
try
{
this.dtb = DateTime.Now; //用于统计所用时间的
this.Cursor = Cursors.WaitCursor;
double dylx, dybj, bxhj, lxhj, bjhj, sybj; //当月利息,当月本金,利息合计,本金合计,剩余本金
double yll = ll / 12 / 100; //月利率
dybj = 0; lxhj = 0; bjhj = 0;
double myhk = dk * yll * Math.Pow((1 + yll), ys) / (Math.Pow((1 + yll), ys) - 1);//每月还款
myhk = Math.Round(myhk, 2);
//生成excel文件
StreamWriter excelfile = null;
string filename = "等额" + System.DateTime.Now.Date.ToString("yyyy-MM-dd") + ".csv";
if (File.Exists(filename)) File.Delete(filename);
excelfile = new StreamWriter(filename, false, System.Text.Encoding.Default);
string filehead = "按揭贷款" + dk.ToString() + "元," + this.nud.Value.ToString() + "年,利率" + ll.ToString() + "," + this.hkfs.SelectedItem.ToString() + "还款,每月还款" + myhk.ToString() + "元,情况如下:\r\n";
excelfile.WriteLine(filehead);
string columnhead = "期数,当月还款,当月利息,当月本金,利息合计,本金合计,本息合计,剩余本金";
excelfile.WriteLine(columnhead);
//在窗口的文本框内显示结果
this.textBox1.Text = filehead;
this.textBox1.Text += "\r\n\r\n";
this.textBox1.Text += "期数".PadLeft(4) + ": |" + "当月利息".PadRight(8) + "|当月本金".PadRight(9);
this.textBox1.Text += "|利息合计".PadRight(9) + "|本金合计".PadRight(9) + "|本息合计".PadRight(9) + "|剩余本金".PadRight(10) + "\r\n";
for (int i = 1; i <= ys; i++)
{
dylx = Math.Round((dk - bjhj) * yll, 2);
lxhj += dylx;
dybj = myhk - dylx;
bjhj += dybj;
bxhj = lxhj + bjhj;
sybj = Math.Round((dk - bjhj), 2);
this.textBox1.Text += i.ToString().PadLeft(6) + ": |" + dylx.ToString().PadRight(12) + "|" + dybj.ToString().PadRight(12) + "|" + lxhj.ToString().PadRight(12) + "|";
this.textBox1.Text += bjhj.ToString().PadRight(12) + "|" + bxhj.ToString().PadRight(12) + "|" + sybj.ToString().PadRight(12) + "\r\n";
excelfile.WriteLine("{0},{1},{2},{3},{4},{5},{6},{7}", i, myhk, dylx, dybj, lxhj, bjhj, bxhj, sybj);//写稿到excel文件
Application.DoEvents();
}
excelfile.Close();
this.textBox1.Text += "\r\n";
//生成txt文件
StreamWriter txtfile = null;
string txtname = "等额" + System.DateTime.Now.Date.ToString("yyyy-MM-dd") + ".txt";
if (File.Exists(txtname)) File.Delete(txtname);
txtfile = new StreamWriter(txtname, false, System.Text.Encoding.Default);
txtfile.WriteLine(this.textBox1.Text);
txtfile.Close();
this.dte = DateTime.Now;//用于统计所用时间的
TimeSpan ts = this.dte - this.dtb;
Int64 totalhm = (Int64)ts.TotalMilliseconds;//整个计算所用毫秒数
Int64 m = (totalhm - totalhm % 1000) / 1000;//转换成秒数
Int64 hm = totalhm % 1000;//不足1秒的毫秒数
this.tssl.Text = "计算完成,用时"+m.ToString()+"."+hm.ToString()+"秒。";
this.Cursor = Cursors.Default;
}
catch(Exception err)
{
this.tssl.Text = err.Message;
}
}
//P4 2.8G 超线程那种,1G内存
//感觉算得太慢,算一个30年的,要70秒左右,把输出excel和txt文件那一部分去掉,算一个20年的也要15秒左右,实在受不了,我觉得应该在一、两秒之内就应该搞定了。
//不知道哪里有问题,请知道的帮忙改进一下,需要源代码的请留下email。