每月付款C计划

时间:2013-11-02 02:35:21

标签: c

需要一些帮助来计算每月固定月付款额(P),以每月i的利率在n个月内完全摊还L美元贷款。给定的公式是:P = L [i(1 + i)n] / [(1 + i)n-1]。我写了一个代码,但它没有计算付款。我想知道是不是因为我使用双重类型与int(数月)或公式的问题?!请帮忙。

#include<stdio.h>
#include <math.h>


double calculatePayments(double rate, double loan, int payments);


int main() {

    double principal, i, monthlyP;
    int month;


        printf ("Enter the principal amount: ");
        scanf ("%f", &principal);

        printf ("Enter the interest amount: ");
        scanf ("%f", &i);

        printf ("Enter the term in months: ");
        scanf ("%d", &month);

        monthlyP = calculatePayments (i, principal, month);

        printf ("The monthly payment amount is %.2f: ", monthlyP);
        return 0;
    }


double calculatePayments(double rate, double loan, int payments) {

    double mPayments;
    mPayments = loan*(rate*(1 + rate)*payments)/((1 + rate)*payments - 1);

    return mPayments;
}

4 个答案:

答案 0 :(得分:1)

scanf()的{​​{1}}个请求%f格式;它应该是double

答案 1 :(得分:1)

除了需要修改输入(%lf而不是%f双打)之外,我认为您的付款公式是错误的:由于未来货币价值呈指数级增长,公式应该具有特色把数字提高到一定的权力,但事实并非如此。

正确的公式如下(from here):

PMT formula

由于贷款需要完全还清,FV等于零。

由于pow(i+1, n)被使用了两次,因此最好一次计算它,并在两个地方使用结果变量。此计算的最终版本如下所示:

double calculatePayments(double rate, double loan, int payments) {
    double mul = pow(1+rate, payments);
    return (loan * mul * rate) / (mul - 1);
}

Demo on ideone以每月0.004%的价格计算10万美元的付款,为期30年,为524.67美元,与excel的PMT函数返回值相同。

注意:当您在公式和其他计算器中输入5.6%的费率时,请不要忘记您的公式采用的是每月费率,而不是每年。因此,您插入外部计算器的速率必须是您输入计算器的12倍(每年5.6%,您应输入0.00466666

答案 2 :(得分:0)

调试的第一个规则之一是确保打印输入以确保程序获得您期望的值。它没有,因为你写道:

scanf ("%f", &principal);

由于principaldouble,格式必须为"%lf"。重复利率。您还应该检查输入是否成功:

if (scanf("%lf", &principal) != 1)
{
    fprintf(stderr, "Failed to read principal\n");
    return(1);
}

如果你打印出输入值,你就会立刻知道出了什么问题。

答案 3 :(得分:0)

阅读dasblinkenlight所说的内容。 此外,

修复您的声明以及您使用scanf()的变量。

principal应为loanmonth应为payments

i没问题。您需要计算给定百分比的每月十进制数。

例如,

interest = (i/100) /12;

在功能调用之前执行此操作。然后基本上只使用主要底部的dasblinkenlight函数。

希望你得分“10”;)