这个抵押贷款公式我做错了什么?

时间:2017-10-12 05:26:13

标签: c++

#include <iostream>
#include <cmath>
using namespace std;


/* FINDS AND INITIALIZES TERM */

void findTerm(int t) {
int term = t * 12;

}

/* FINDS AND INITIALIZES RATE */
void findRate(double r) {
double rate = r / 1200.0;

}

/* INITALIZES AMOUNT OF LOAN*/
void findAmount(int amount) {
int num1 = 0.0;
}

void findPayment(int amount, double rate, int term) {
int monthlyPayment = amount * rate / ( 1.0 -pow(rate + 1, -term));

cout<<"Your monthly payment is $"<<monthlyPayment<<". ";
}

这是主要功能。

int main() {
int t, a, payment;
double r;

cout<<"Enter the amount of your mortage loan: \n ";
cin>>a;

cout<<"Enter the interest rate: \n";
cin>>r;

cout<<"Enter the term of your loan: \n";
cin>>t;

findPayment(a, r, t); // calls findPayment to calculate monthly payment.

return 0;
}

我一遍又一遍地跑,但它仍然给了我不正确的金额。 我的教授给了我们一个这样的例子: 贷款= $ 200,000

率= 4.5%

期限:30年

并且findFormula()函数应该为抵押付款产生1013.67美元。我的教授也给了我们这个代码(monthlyPayment = amount * rate /(1.0 - pow(rate + 1,-term));)。我不确定我的代码有什么问题。

1 个答案:

答案 0 :(得分:2)

The formula may be fine, but you are not returning, nor using, any value from your conversion functions, so its inputs are wrong.

Consider this refactoring of your program:

#include <iostream>
#include <iomanip>      // for std::setprecision and std::fixed
#include <cmath>

namespace mortgage {

int months_from_years(int years) {
    return years * 12;
}

double monthly_rate_from(double yearly_rate) {
    return yearly_rate / 1200.0;
}

double monthly_payment(int amount, double yearly_rate, int years)
{
    double rate = monthly_rate_from(yearly_rate);
    int term = months_from_years(years);
    return amount * rate / ( 1.0 - std::pow(rate + 1.0, -term));
}

} // end of namespace 'mortgage'

int main()
{
    using std::cout;
    using std::cin;

    int amount;
    cout << "Enter the amount of your mortage loan (dollars):\n";
    cin >> amount;

    double rate;
    cout << "Enter the interest rate (percentage):\n";
    cin >> rate;

    int term_in_years;
    cout << "Enter the term of your loan (years):\n";
    cin >> term_in_years;

    cout << "\nYour monthly payment is: $ " << std::setprecision(2) << std::fixed
        << mortgage::monthly_payment(amount, rate, term_in_years) << '\n';
}

It still lacks any checking of the user inputs, but given the values of your example, it outputs:

Enter the amount of your mortage loan (dollars):
200000
Enter the interest rate (percentage):
4.5
Enter the term of your loan (years):
30

Your monthly payment is: $ 1013.37

The slightly difference from your expected output (1013,67) could be due to any sort of rounding error, even a different overload of std::pow choosen by the compiler (since C++11, the integral parameters are promoted to double).