いくつか間違いがあるので、コードをよく見てみましょう。まず、それをリファクタリングします。
- 出力は質問とは関係がないため、この部分を関数から削除します。
- グローバル変数もダメ、ハードコーディングもダメなので、関数引数にしましょう。
eval
ここで使用する必要はまったくありません。
- myFunction は役に立たない名前です。
結果:
function calcLoan(rte, pmt, amt)
{
return (Math.log(1+(rte/(pmt/(amt)-rte)))/Math.log(1+rte))/12;
}
document.getElementById("demo").innerHTML = calcLoan(1.09/1200, 1500, 1000000);
次に、関数コード自体に取り組みます。
- 冗長な中括弧を削除しましょう
- 引数名を短くして、Math のように見えるようにしましょう
- (一時的に)いくつかのデバッグ情報を追加しましょう。
結果:
function calcLoan(r, p, a)
{
return Math.log( 1 + (r / (p/a - r) ) ) / Math.log(1 + r) / 12;
}
function debugLoan(r, p, a)
return [ p/a, Math.log( 1 + (r / (p/a - r) ) ), 1 + (r / (p/a - r) ), Math.log(1 + r) ];
}
// call
calcLoan( 1.09/1200, 1500, 1000000 );
//85.38526703746216
// call with bigger number
calcLoan( 1.09/1200, 1500, 10000000 );
// NaN, because we supply negative value to Math.log
// see it yourself
debugLoan( 1.09/1200, 1500, 10000000 );
// [0.00015, NaN, -0.19780219780219777, 0.0009079210482536982]
[Math.log
参照] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log ) でわかるように、引数として負の値を指定すると、常に NaN になります。 .
つまり、コードが悪いだけでなく、式も間違っています。