每月付款计算器返回错误付款

时间:2015-02-10 19:48:02

标签: java

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

  

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

,其中

  • P是贷款本金(即借入的金额)
  • 我是月利率(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;
    }
}

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

你现在拥有的是:

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

答案 2 :(得分:0)

您的公式不正确,必须是

class Foo {
  //@ts-ignore
  greet(str: string): void;
  @methodOverride
  greet(x: number) {
    console.log("Hello, World");
  }
}

let foo = new Foo();
foo.greet("FooBar"); // okay, no error

兴趣值公式中有一个错误,它必须是

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

所以您的方法interest = annualIRate / 100 / 12; 现在给出3,这是正确的。