【问题标题】:Monthly payment calculator returning wrong payment每月付款计算器返回错误付款
【发布时间】:2015-02-10 19:48:02
【问题描述】:

我应该用给定的公式在 java 中制作一个每月付款计算器。 我使用的公式是

M = P * i/ 1 - (1+i)^-n

在哪里

  • P 是贷款本金(即借款金额)
  • i 是月利率(annual_interest_rate / 12;以小数表示)
  • N 是时间(贷款总年数中的每月付款次数;即年 * 12)

下面的代码是我尝试获得每月付款的功能。

但如果我以 200 的贷款金额放入 6 年,使用公式我得到 140。 我很困惑为什么我会得到这个数字。任何帮助将不胜感激

public static int calMonthlyPay(double loanAmt, int y)  {
    double m = 0.0, interest = 0.0, annualIRate = 0.0;
    double months = 0.0;
    months = y * 12; 
    annualIRate = getAnnualIRate(y);
    interest = annualIRate / 12;

    System.out.println(interest);
    System.out.println(months);
    System.out.println(loanAmt);
    System.out.println(y);

    m = (loanAmt * (interest - Math.pow((1 + interest), -months))); // This is my formula calculation
    System.out.println(m);

    return 0;
}

private static double getAnnualIRate(int y)  {
    switch (y) {
    case 2:
        return 5.7;
    case 3:
        return 6.2;
    case 4:
        return 6.8;
    case 5:
        return 7.5;
    case 6:
        return 8.4;
    default:
        return 8.4;
    }
}

【问题讨论】:

  • 为什么要除以1? P * i/ 1

标签: java


【解决方案1】:

如果我理解你的公式是正确的,它应该是:

m = loanAmt * interest - Math.pow(1 + interest, -months);

【讨论】:

    【解决方案2】:

    你现在拥有的是:

    m = (loanAmt * (interest / 1 - Math.pow((1 + interest), -months))) =
        (loanAmt * (interest - Math.pow((1 + interest), -months)))
    

    你应该正确使用括号:

    m = loanAmt * (interest / (1 - Math.pow(1 + interest, -months)));
    

    【讨论】:

      【解决方案3】:

      你的公式不正确,应该是

      loanAmt * (interest / (1 - Math.pow (1 + interest, -months)));
      

      而且利息值公式有错误,应该是

      interest = annualIRate / 100 / 12;
      

      所以你的方法calMonthlyPay(200, 6) 现在给出了 3,这是正确的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-03
        • 1970-01-01
        • 2021-08-05
        • 1970-01-01
        • 2011-01-28
        • 2015-04-13
        • 1970-01-01
        • 2021-10-11
        相关资源
        最近更新 更多