我有两个问题,我无法弄清楚。我正在使用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
}
答案 0 :(得分:1)
要定位正确的tbody
代码,您应在其上添加ID并使用document.getElementById("xxx")
,因为这样可以保证您获得正确的代码,而无需依赖HTML文档中的特定位置索引。< / p>
仅供参考,所有表格都有一个tbody
标记,无论它是否在您的HTML中。
您可以看到我如何使用document.getElementById("results")
将结果显示在右表中:http://jsfiddle.net/jfriend00/MqMtd/
此外,您想要成为局部变量(不是全局变量)的函数内的所有变量都应该在它们前面有变量。你正在使用很多隐式全局变量(变量从未显式声明),这是一种非常糟糕的做法。
newAmount
的值无效,因为初始化它的代码在它所依赖的变量填充之前运行。我建议你在{{1}中设置newAmount
的值设置其依赖的其他值的地方。