可能重复:
interest calculation
这就是我得到的。不同帐户类型的Customer类对象的LinkedList(Savings,current和fixed)。每个Customer对象都有一个LinkedList of transactions(另一个类)作为属性。可以进行2种类型的交易,即借记(提款)或信用(存款)。鉴于:储蓄账户可能会变为负数,而其他两个账户则不能。允许从固定帐户中扣除任何借记交易(不提取)。
如果账户余额为正,那么利率为0.0003,而如果账户余额为负数(仅适用于储蓄账户),则费率为-0.002。利息计算如下:
为了积极的利益,它是基于有钱的 在过去24小时内(即从午夜到午夜)进入帐户。例如,如果 你在0小时就有100美元,但你在第1小时已经退出了50美元,并且已经退还了50美元 在第2小时,您将被视为只有50美元在您的帐户中停留24小时 当天(24小时)。在第24小时,您帐户中的资金将为100美元加上每日 利息按50美元计算。
对于负利息,它基于您欠的最大负资金的总和 那天的银行。如果您从银行借钱,他们会向您收取利息 即使你在1分钟后还钱。例如,如果您的储蓄帐户有 0小时100美元,但你在22小时提取200美元,然后在每小时存入1000美元 23.到今天深夜,您将不会获得任何正面利息,但将收取费用 今天从银行借入100美元的负利息。
对于最初为$ 566.00的储蓄账户,账户上的交易如下: 借方:50(日期:2008年9月11日),借方:500(15-09-2008);信用:200(22-09-2008);借方:500(23-09-2008)。
样本计算如下:
<(>((566 * 1.0003 ^ 10-50)* 1.0003 ^ 4-500)* 1.0003 ^ 8 + 200-500)* 1.002 ^ 8~ = 286.17。我得到一些1377.68的数字,显然不匹配。
这是我对储蓄账户的所得,但我很确定这是错的。我的问题是如何在循环每个客户的交易时计算利息。我的计算错了。所以如果有人可以帮我修复逻辑,我将不胜感激
public void update(double rate){ // Savings account interest calc
Transactions ctr = new Transactions();
Node<Transactions> counter = new Node<Transactions>(ctr);
counter=this.trans.head;
int i=0;
double negRate = -0.002;
double posRate = 0.0003;
double updatedBal = this.get_balance();
while(counter!=null){
if (updatedBal >0){
if(trans.getItem(i).AccType.equals("Crebit")){
double exponent = Double.parseDouble(trans.getItem(i).get_Date().substring(0, 2));
updatedBal= (updatedBal*(Math.pow((1+ posRate),exponent-1))+trans.getItem(i).get_Amount());
}
else if(trans.getItem(i).AccType.equals("Debit")){
double exponent = Double.parseDouble(trans.getItem(i).get_Date().substring(0, 2));
updatedBal= (updatedBal*(Math.pow((1+ posRate),exponent-1))-trans.getItem(i).get_Amount());
}
}
else
{
if(trans.getItem(i).AccType.equals("Crebit")){
double exponent = Double.parseDouble(trans.getItem(i).get_Date().substring(0, 2));
updatedBal= (updatedBal*(Math.pow((1+ negRate),exponent-1))+trans.getItem(i).get_Amount());
}
else if(trans.getItem(i).AccType.equals("Debit")){
double exponent = Double.parseDouble(trans.getItem(i).get_Date().substring(0, 2));
updatedBal= (updatedBal*(Math.pow((1+ negRate),exponent-1))-trans.getItem(i).get_Amount());
}
}
counter=counter.next;
}
this.set_balance(updatedBal);
}