【问题标题】:interest calculation利息计算
【发布时间】:2011-07-25 13:32:39
【问题描述】:

这就是我得到的。不同帐户类型(储蓄、当前和固定)的客户类对象的链接列表。每个客户对象都有一个交易链接列表(另一个类)作为属性。可以进行两种类型的交易,即借记(取款)或贷记(存款)。给定:一个储蓄账户可以变成负数,而其他两个账户不能。不允许从固定账户进行借记交易(禁止提款)。

如果账户余额为正,则利率为 0.0003,而如果账户余额为负(仅适用于储蓄账户),利率为 -0.002。利息计算如下:

对于正利息,它基于拥有的资金 过去 24 小时(即从午夜到午夜)在帐户中。例如,如果 您在第 0 小时有 100 美元,但您在第 1 小时提取了 50 美元并存回了 50 美元 在第 2 小时,您将被视为 24 小时内只有 50 美元留在您的帐户中 当天(24 小时)。在 24 小时,您帐户中的资金将是 100 美元加上每日 利息按 50 美元计算。

对于负利息,它基于您所欠的最大负金额的总和 那天的银行。如果你从银行借钱,他们会向你收取利息 即使您在 1 分钟后还钱。例如,如果您的储蓄账户有 0 小时 100 美元,但您在 22 小时提取 200 美元,然后在 1 小时存入 1000 美元 23. 您将不会在今天午夜之前获得任何正利息,但将收取 今天从银行借 100 美元的负利率。

对于初始金额为 566.00 美元的储蓄账户,该账户的交易如下: 借:50(日期:11-09-2008),借:500(15-09-2008);信用:200(22-09-2008);借方:500(2008 年 9 月 23 日)。

样本计算如下:

(((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);
    }

【问题讨论】:

  • 您的问题是什么?我预计如果您不采取补救措施,这将很快关闭。请记住,我们不是来做你的家庭作业/工作的。向我们展示您已经做出了一些努力,并清楚地说明了难以克服的编程挑战是什么。
  • 啊抱歉,我误打了帖子问题。
  • 在所有条件下如何计算利息...
  • “我的计算错误”是什么意思?您尝试了哪些数据,获得了哪些输出,与您的预期有何不同?

标签: java


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    相关资源
    最近更新 更多