Моя задача — создать ипотечный калькулятор, который принимает основную сумму, процентную ставку и срок кредита. Затем он отобразит ожидаемый ежемесячный платеж и общую сумму выплаченных процентов. Я также пытаюсь сделать это, используя статический метод. Когда я запускаю его, отображается ежемесячный платеж и общая сумма процентов $NaN
. Я не думаю, что моя формула неверна, потому что, посчитал ее на калькуляторе, я получил правильный ответ.
Например, принцип в размере 53 000 долларов США, процентная ставка 7,625% и срок 15 лет должны отображать ежемесячный платеж в размере 495,09 долларов США и общую сумму выплаченных процентов в размере 36 155,99 долларов США.
Текущий код:
public class FinanceCalculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//Asking user which calculator they want to use
System.out.println("Which calculator would you like to use? (1)Mortgage, (2)Future Value");
byte userIn = scanner.nextByte();
//Creating if statements for each calculator
if (userIn == 1) {
System.out.println("Enter the principle: ");
float principle = scanner.nextFloat();
System.out.println("Enter interest rate: ");
float intRate = scanner.nextFloat();
System.out.println("Enter loan length(In Years):" );
int loanTerm = scanner.nextInt();
float monthlyMortgage = (float) mortgageCalc(principle, intRate, loanTerm);
float totaledInterest = ((loanTerm * 12 * monthlyMortgage) - principle);
System.out.println("A $" + principle + " loan at " + intRate + "% interest for " + loanTerm + "years would have a $" + monthlyMortgage + "/mo payment with " +
"a total interest of $" + totaledInterest);
}
}
//Creating mortgage calculator, Calculating monthly mortgage
public static double mortgageCalc(float loan, float rate, int term) {
float decimalIntRate = rate * 100;
float mortgage = (float) ((((loan * (decimalIntRate / 12)) * Math.pow(1 + (decimalIntRate / 12), 12 * term)) / Math.pow(1 + (decimalIntRate / 12), 12 * term)) - 1);
return mortgage;
}
}
Результат, который я хочу отобразить,
A $53000.0 loan at 7.625% interest for 15years would have a $495.09/mo payment with a total interest of $36155.99
Это формула, которой я следовал
Попробуйте вот так.
double i = .07625/12; // interest per month
double p = 53_000; // principal
double n = 180; // number of payments (15 years x 12 months/year)
double mort = p*i*Math.pow(1+i, n)/(Math.pow(1+i, n)-1);
System.out.printf("Mort = $%.2f%n",mort);
System.out.printf("Total Interest = $%.2f%n",mort*n-p);
принты
Mort = $495.09
Total Interest = $36115.99
В вашем методе Calc были отключены круглые скобки. И вы умножили годовую процентную ставку на 100
вместо деления. Поскольку Math.pow
возвращает double
, я бы просто придерживался этого и не использовал float
.
public static double mortgageCalc(double loan, double rate, int term) {
double decimalIntRate = rate / 100;
double mortgage = (double) loan * (decimalIntRate / 12)*
(Math.pow(1 + (decimalIntRate / 12), 12 * term)
/ (Math.pow(1 + (decimalIntRate / 12), 12 * term) - 1));
return mortgage;
}
Я предлагаю сохранить имена переменных (также в определении метода), чтобы вы не запутались, во-вторых, попробуйте разбить расчет на части, чтобы вам было легко понять, когда вы сталкиваетесь с какой-либо проблемой.