0

私は理解できなかった2つの問題を抱えています。私は複利を計算するためにJavaScriptを使用しています。利息を計算するための私の式は機能しますが、計算後に表示される表形式の利率スケジュール(毎回発生する金額を期間ごとに表示するため)と、最終的な合計および合計利息額が必要です。これは私のコードがどのように見えるかです:

<head>
    <title></title>
<script type="text/javascript">
    function rateSched(amnt, prd, rte, namt) {
        for (i = 0; i < periods; i++) {
            if (!document.getElementsByTagName) return;
            tabBody = document.getElementsByTagName("tbody").item(0);
            row = document.createElement("tr");
            cell1 = document.createElement("td");
            cell2 = document.createElement("td");
            cell3 = document.createElement("td");
            cell4 = document.createElement("td");
            textnode1 = document.createTextNode(amnt);
            textnode2 = document.createTextNode(prd);
            textnode3 = document.createTextNode(rte);
            textnode4 = document.createTextNode(namt);
            cell1.appendChild(textnode1);
            cell2.appendChild(textnode2);
            cell3.appendChild(textnode3);
            cell4.appendChild(textnode4);
            row.appendChild(cell1);
            row.appendChild(cell2);
            row.appendChild(cell3);
            row.appendChild(cell4);
            tabBody.appendChild(row);
        } 
    }
    var deposit;
    var periods;
    var interest;
    var newamount = deposit * (Math.pow(1 + interest, periods) - 1) / interest;
    var i=0;

    function calcAmt(form1) {
        deposit = form1.dp.value;
        interest = form1.rt.value;
        periods = form1.pr.value;
        form1.amt.value = Math.round(deposit * (Math.pow((1 + interest / 100), periods)) * 100) / 100;
        form1.intr.value = Math.round((deposit * (Math.pow((1 + interest / 100), periods)) - deposit) * 100) / 100
    }
</script>
</head>
<body>
<center>
    <form method="get" name="form1" onreset="form1.dp.focus()">

    <table border="5" bgcolor="#BDBDBD" cellpadding="2" width="300px">
    <tr><td colspan="2" align="center">
    <b><font size="5" color="#4B088A">Compound Interest</font></b>
    </td></tr>

    <tr><td align="right">Initial Deposit</td><td>
    <input type="text" name="dp" value=""/></td></tr>

    <tr><td align="right">Interest Rate (% Value)</td><td>
    <input type="text" name="rt" value=""/></td></tr>

    <tr><td align="right">Periods</td><td>
    <input type="text" name="pr" value=""/></td></tr>

    <tr><td align="right">Final Amount</td><td>
    <input type="text" name="amt" value=""/></td></tr>

    <tr><td align="right">Total Interest</td><td>
    <input type="text" name="intr" value=""/></td></tr>

    <tr><td>
    <input type="button" name="calc" value="Calculate" size="13" onclick="calcAmt(form1);rateSched(deposit,interest,i,newamount);return false;"/></td>

    <td></td></tr>
    </table>
    </form>

    <br />

    <table border='1' width="300px">
    <tbody>
    <tr><td>Amount</td><td>Period</td><td>Rate</td><td>New Amount</td></tr>
    </tbody>
    </table>

    <br />

    <table>
    <tr><td align="right">Final Amount</td><td>
    <input type="text" name="amt" value="" size="13"/></td></tr>

    <tr><td align="right">Total Interest</td><td>
    <input type="text" name="intr" value="" size="13"/></td></tr>
    </table>

    </center>
</body>
</html>

私の問題は、新しいテーブルの行を上のテーブルではなく下の4列のテーブルに追加し、同じ列の代わりに各期間を表示する必要があることです。下の「最終金額」と「合計利息」はonclickで入力しないでください。

編集:コメントで説明されているように問題を抱えているコードの最新バージョン:

function calcAmt(form1) { 
    var newamount = deposit * (Math.pow(1 + interest, periods) - 1) / interest; 
    deposit = form1.dp.value; 
    interest = form1.rt.value; 
    periods = form1.pr.value; 
    form1.amt.value = Math.round(deposit * (Math.pow((1 + interest / 100), periods)) * 100) / 100; 
    form1.intr.value = Math.round((deposit * (Math.pow((1 + interest / 100), periods)) - deposit) * 100) / 100 
}
4

1 に答える 1

1

適切なタグをターゲットにするtbodyには、IDを付けて使用する必要がありdocument.getElementById("xxx")ます。これにより、HTMLドキュメント内の特定の位置インデックスに依存せずに、適切なタグを取得できることが保証されます。

tbody参考までに、HTMLにあるかどうかに関係なく、すべてのテーブルにタグがあります。

document.getElementById("results")結果を正しい表に入れるために私がどのように使用するかをここで見ることができます:http: //jsfiddle.net/jfriend00/MqMtd/

また、(グローバルではなく)ローカル変数にする予定の関数内のすべての変数の前にvarを付ける必要があります。多くの暗黙のグローバル(明示的に宣言されていない変数)を使用していますが、これは非常に悪い習慣です。

の値はnewAmount、それを初期化するコードが、依存する変数が入力される前に実行されるため、無効です。依存する他の値が設定されている場所にの値newAmountを設定することをお勧めします。calcAmt()

于 2012-04-13T05:44:51.273 に答える