利息计算

时间:2011-03-29 19:18:17

标签: java

这就是我得到的。不同帐户类型的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);
    }

1 个答案:

答案 0 :(得分:0)

您的代码在两个地方有trans.getItem(i).AccType.equals("Crebit")。据推测应该是Cre d 它。如果交易项目的AccType字段的值使用正确的拼写,那么您的if块在计算利息时不会“看到”信用交易,这可能会导致错误答案。