2017-09-29 13 views
1

ローンの返済可能額(毎月の複合利息)を示す文字列出力を生成するための小さなプログラムを作成しようとしています。私は2つのオンライン計算機を使って作業を検証していますが、どちらもお互いに違いがあります。結果の異なる償却スケジュール計算

  • 融資額:1000
  • 率:7%
  • 期間:36ヶ月
  • 毎月返済予定:30.78
  • 総返済可能:£1108.04(これは結果に近い私は よ期待値)

上記は、次のオンライン計算機によって確認されます。https://www.moneysupermarket.com/loans/calculator/

しかし、ほとんどすべての他のオンライン計算機に私が取得:

  • 毎月返済予定:30.88
  • 総返済可能:£1,111.53

例:

https://en-gb.calculatestuff.com/financial/loan-amortization-calculator

http://www.calculator.net/amortization-calculator.html?cloanamount=1000&cloanterm=3&cinterestrate=7&printit=0&x=69&y=15

さらに私自身のコードでは、1,111.53が得られます。だから、私は最終的な価値が正しいかどうか混乱している。私は最初に見つけた値である1108.04の値に近づきたいと思いますが、私がここで何が欠けているかはわかりません。

public void CompoundCalculator(double lenderRate, double loanPeriodInMonths, double desiredLoanAmount){ 
     var repaymentAmount = PMT(7, 36, 1000); 
     var balance = desiredLoanAmount; 
     var totalInterest = 0.00; 

     for (var i = 0; i < loanPeriodInMonths;i++) 

     { 
      var monthlyInterest = Math.Round(balance * ((lenderRate/1200)),2); 


      balance -= Math.Round(repaymentAmount - monthlyInterest,2) ; 
       totalInterest += monthlyInterest; 


     } 
     //do something here later with totalInterest variable 

    } 

public static double PMT(double yearlyInterestRate, int totalNumberOfMonths, double loanAmount) 
    { 
     var rate = (double)yearlyInterestRate/100/12; 
     var denominator = Math.Pow((1 + rate), totalNumberOfMonths) - 1; 
     return (rate + (rate/denominator)) * loanAmount; 
    } 
+0

どこでも2倍の値を使用していることを確認してください。たとえば100.0/12.0とします。つまり計算に使用されているevey番号はfloat/double – pm100

+0

こんにちはpm100です。ありがとうございます。私はキーの整数のすべてがdouble型として宣言されるようにいくつかの調整を加えましたが、残念ながらそれは何の違いもありませんでした。 – Sulphy

+0

最初の電卓がちょっとだけ奇妙です。私はそれを手動で計算し、同じ答えを得ました。これは推測ですが、最初の電卓を所有している会社は、競争よりも見栄えを良くするために、その額を少し下げているかもしれません。 –

答えて

1

あなたの問題は、あなたが間違ったレートを使用することです:あなたは作る、それが実際にある間、月額料金は、(1 + yearlyrate)^(1/12)yearlyrate/12だったかのように-1(ありますあなたはそれを12回を配合する際yearlyrateを与える割合。

例えば、7%の率のために、月額料金は〜0.5654パーセントであり、あなたの計算のようなない0.5833%が見つかった。

は(ダブルからあなたの式を置き換えます)yearlyInterestRate/100/12~

Math.Pow(1+(yearlyInterestRate/100),1.0/12)-1 

は、正しい結果を提供する必要があります(月額30.7789ドル)

1

私の借り入れ経験(米国のみ)に基づいて、より大きな数値は貸し手によってより一般的に請求されます。彼らは、一定の月次レートまたは貸出期間中の日数に基づいている「定期金利」を計算します。次に、期間終了時に未払いの元本に対する利子を計算します。

貸出機関のオンライン計算機を使用している場合、貸与機関が提供する価値は、貸し出しのための料金となります。希望の結果を得るためにコードを調整する必要があるかもしれませんが、貸出機関からお金を借りれば、おそらくより高い支払いがあります。

私の住宅ローン貸し手の1人は、毎月のハイブリッドを使用していました。私が標準的な支払いをしたとき、支払いがいつ行われたかにかかわらず、満期の利息が請求されました。私が余分な支払いをした場合、元本はすぐに減額されたので、来月の利息は、支払いを行った日によって多かれ少なかれになる可能性があります。彼らの計算に合うようにしました。私の他のすべての貸し手はレート/ 12を使用し、翌月の元本を減額することにより余分な支払いを適用しました。

関連する問題