Пытаюсь найти ошибку в формуле ипотечного калькулятора

Моя задача — создать ипотечный калькулятор, который принимает основную сумму, процентную ставку и срок кредита. Затем он отобразит ожидаемый ежемесячный платеж и общую сумму выплаченных процентов. Я также пытаюсь сделать это, используя статический метод. Когда я запускаю его, отображается ежемесячный платеж и общая сумма процентов $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

Это формула, которой я следовал

Я предлагаю сохранить имена переменных (также в определении метода), чтобы вы не запутались, во-вторых, попробуйте разбить расчет на части, чтобы вам было легко понять, когда вы сталкиваетесь с какой-либо проблемой.

maddy 14.04.2024 09:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте вот так.

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

Другие вопросы по теме