Результат расчета всегда 0 - PullRequest
0 голосов
/ 04 октября 2019

Я имитирую калькулятор выплат по кредиту и уверен, что использовал правильное уравнение и типы данных. Я пропускаю преобразование типов данных или что-то? Я делаю что-то, что не разрешено в C ++?

Я пробовал переупорядочивать переменные в уравнении, изменять типы данных переменных и функций, перемещать уравнение за пределы функций.

float annualInterestRate,
       payment,
       periodRate = annualInterestRate / 1200.0;

int loanAmount,
    years,
    months = years * 12;

int mortgageLoanMinimum = 100000,
    carLoanMinimum = 5000,
    carLoanMaximum = 200000;

float mortgageRateMinimum = 2.0,
       mortgageRateMaximum = 12.0,
       carRateMinimum = 0.0,
       carRateMaximum = 15.0;

int mortgageTermMinimum = 15,
    mortgageTermMaximum = 30,
    carTermMinimum = 3,
    carTermMaximum = 6;
float mortgage() {

    cout << "How much money do you want to borrow? (Nothing less than $100,000): ";
    cin >> loanAmount;
    cout << "How much annual interest rate by percent? (2.0% - 12.0%): ";
    cin >> annualInterestRate;
    cout << "For how many years? (15 - 30 Years): ";
    cin >> years;

    payment = (loanAmount * periodRate * pow((1 + periodRate), months)) / (pow((1 + periodRate), months));



    return(payment);

}

При выборе ипотеки, вводе 500000 для loanAmount, 4,5 для yearInInrestrestRate и 30 для лет, я ожидал, что платеж будет 2533,80, но это всегда 0.

Ответы [ 4 ]

0 голосов
/ 04 октября 2019

Вы объявили periodRate как

periodRate = annualInterestRate / 1200.0;

Однако, когда объявляется periodRate, annulaInterestRate является инициализированным компилятором значением, равным 0.0f, что также означает periodRate = 0.0f. Здесь вам нужно использовать define

#define periodRate (annualInterestRate / 1200.0)

То же самое для месяцев.

#define months (years * 12)

0 голосов
/ 04 октября 2019

Строки

float annualInterestRate,
       payment,
       periodRate = annualInterestRate / 1200.0;

int loanAmount,
    years,
    months = years * 12;

не делают то, что, я думаю, вы хотите, чтобы они делали.

periodicRate и months инициализируются до 0. Однако они необновляется, когда вы читаете значения annualInterestRate и years из пользовательского ввода.

Вы должны вычислить periodicRate и months после того, как annualInterestRate и years были прочитаны.

float mortgage() {

    cout << "How much money do you want to borrow? (Nothing less than $100,000): ";
    cin >> loanAmount;
    cout << "How much annual interest rate by percent? (2.0% - 12.0%): ";
    cin >> annualInterestRate;
    cout << "For how many years? (15 - 30 Years): ";
    cin >> years;

    float periodRate = annualInterestRate / 1200.0;
    int months = years * 12;

    payment = (loanAmount * periodRate * pow((1 + periodRate), months)) / (pow((1 + periodRate), months));

    return(payment);
}

С этим изменением вы можете удалить глобальные переменные periodicRate и months.

0 голосов
/ 04 октября 2019

Я подозреваю, что вы ошибаетесь, как

months = years * 12;

на самом деле работает.

Когда этот оператор выполняется, он устанавливает значение months в 12 раз больше текущего значения years. Это не говорит компьютеру, что месяцы всегда должны быть в 12 раз больше значения years. Прямо сейчас, когда оператор выполняется, значение years еще не установлено, и поэтому years * 12 == 0.

Вы можете исправить свой код, присвоив значение months после получения пользовательского ввода дляyears или заменив months в своем расчете на 12 * years.

0 голосов
/ 04 октября 2019

Глобальные переменные инициализируются на 0 в C ++.

Когда вы делаете

int loanAmount,
years,
months = years * 12;

years инициализируется на 0, а months инициализируется на 0 * 12 =0. Поскольку вы никогда не обновляете значение months, чтобы оно не было 0, вычисление всегда будет 0.

...