0

L ドルのローンを月利 i で n か月間にわたって完全に償却するために必要な固定月額支払額 (P) の計算について、助けが必要です。与えられた式は、P = L[i(1 + i)n]/[(1 + i)n - 1] です。コードを書きましたが、Payment が計算されませんでした。double 型を 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

4 に答える 4

1

入力を修正する必要があることに加えて ( doubles%lfの代わりに%f)、支払い式が間違っていると思います: お金の将来価値は指数関数的に増加するため、式は数値を特定の累乗にする機能を備えている必要がありますが、そうではありません。

正しい式は次のようになります (ここから):

PMT式

ローンは完全に返済する必要があるため、FVはゼロに等しくなります。

pow(i+1, n)は 2 回使用されるため、1 回計算して、結果の変数を 2 か所で使用することをお勧めします。この計算の最終バージョンは次のようになります。

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

ideone のデモは、$100,000 の月額 0.004% で 30 年間、$524.67 の支払いを計算します。これは、Excel の PMT 関数が返す値と同じです。

注 :計算式と別の計算機にレートを入力するときは、5.6%計算式が 1 年あたりではなく 1 か月あたりのレートであることを忘れないでください。したがって、外部の計算機に接続するレートは、計算機に入力するレートの 12 倍でなければなりません (年間 5.6% の場合は、0.00466666 を入力する必要があります)。

于 2013-11-02T02:59:56.993 に答える
1

;のscanf()リクエスト%f形式 doubleである必要があります%lf

于 2013-11-02T02:39:26.257 に答える
0

デバッグの最初のルールの 1 つは、入力を出力して、プログラムが予期した値を取得したことを確認することです。あなたが書いたので、そうしませんでした:

scanf ("%f", &principal);

principalは であるためdouble、形式は である必要があります"%lf"。金利について繰り返します。入力が成功したことも確認する必要があります。

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

入力値を出力しておけば、何が問題なのかすぐにわかります。

于 2013-11-02T02:39:57.427 に答える