0

我有两个我无法弄清楚的问题。我正在使用 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>

我的问题是新表格行应该附加到较低的四列表格而不是上部表格,它们应该显示每个时期而不是相同的列,底部的“最终金额”和“总利息”做不用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无效,因为初始化它的代码在填充它所依赖的变量之前运行。我建议您将值设置newAmountcalcAmt()它所依赖的其他值的设置位置。

于 2012-04-13T05:44:51.273 回答