【问题标题】:Javascript Loan Calculator with While loop带有 While 循环的 Javascript 贷款计算器
【发布时间】:2014-05-27 11:45:44
【问题描述】:

该程序应该确定还清贷款需要多少个月。似乎无法弄清楚如何修复我的数学计算。不确定是否是错误的while循环。输入显示总月数(我不想要。程序应该这样做),而不是根据用户输入确定每月付款。它应该看起来像这样:http://snag.gy/9vzGi.jpg 这是代码:

<html>
<head>
<title></title>

<script type="text/javascript">

 function fixVal(value,numberOfCharacters,numberOfDecimals,padCharacter) { 
    var i, stringObject, stringLength, numberToPad;            

    value = value * Math.pow(10,numberOfDecimals);                 
    value = Math.round(value);                                   
    stringObject = new String(value);                            
    stringLength = stringObject.length;                          
    while(stringLength < numberOfDecimals) {                     
        stringObject = "0"+stringObject;                    
        stringLength=stringLength+1;                      
    }

    if(numberOfDecimals>0) {                       
        stringObject=stringObject.substring(0,stringLength-numberOfDecimals)+"."+
        stringObject.substring(stringLength-numberOfDecimals,stringLength);
    }

    if (stringObject.length<numberOfCharacters && numberOfCharacters>0) {
        numberToPad=numberOfCharacters-stringObject.length;      
        for (i=0; i<numberToPad; i=i+1) {
            stringObject=padCharacter+stringObject;
        }
    }

    return stringObject;                                      
}

function buildTable() {

    var amount=parseFloat(document.getElementById("loanAmt").value );
    var numpay=parseInt(document.getElementById("monthlyPay").value );
    var rate=parseFloat(document.getElementById("intRte").value );

    rate = rate / 100;
    var monthly = rate / 12;
    var payment = ((amount * monthly) / (1-Math.pow((1 + monthly), - numpay)));
    var total = payment * numpay;
    var interest = total - amount;

    var msg = "<table border='4' width='75%'>";
    msg += "<tr>";
    msg += "<td>Month</td>";
    msg += "<td>Principal Paid</td>";
    msg += "<td>Interest Paid</td>";
    msg += "<td>Loan Balance</td>";
    msg += "</tr>";

    newPrincipal=amount;
    var i = 1;
    while (i <= numpay) {
        newInterest=monthly*newPrincipal;
        reduction=payment-newInterest;
        newPrincipal=newPrincipal-reduction;

        msg += "<tr><td align='left' bgcolor='pink'>"+i+"</td> \
                <td align='left' bgcolor='pink'>"+fixVal(reduction,0,2,' ')+"</td> \
                <td align='left' bgcolor='pink'>"+fixVal(newInterest,0,2,' ')+"</td> \
                <td align='left' bgcolor='pink'>"+fixVal(newPrincipal,0,2,' ')+"</td></tr>";

        i++;
    }


    msg += "</table>";

    document.getElementById("results").innerHTML = msg;


}


</script>

<style type="text/css">

body {
    background: black;
    font-family: arial;
}

#contentwrap {
    width: 700px;
    margin: 40px auto 0px auto;
    background: #FFFFCC;
    text-align: center;
    border: 6px red solid;
    border-radius: 10px;
    padding: 40px;
}

table {
    border: 5px blue double;
    background-color: #FFFFCC;
}

#header {
    text-align: center;
    font-size: 2.5em;
    text-shadow: yellow 3px 3px;
    margin-bottom: 18px;
    color: red;
}

#button {
    background: blue;
    color: white;
    cursor: pointer;
    padding: 5px 0px 5px 0px;
    border: 1px solid red;
    border-radius: 25px;
    width: 150px;
}

.contentTitles {
    color: green;
    font-weight: bold;
}

.style {
    background: lightblue;
    font-family: comic sans ms;
    border: 6px blue double;
    color: green;
    font-weight: bold;
}

</style>

</head>

<body>

<div id="contentwrap">

<div id="header">Javascript Loan Calculator</div>

<form>

<div class="contentTitles">Enter Loan Amount<br />
<input type="text" id="loanAmt" class="style"><p />

Interest Rate (%)<br />
<input type="text" id="intRte" class="style"><p /> 

Monthly Payment Amount<br />
<input type="text" id="monthlyPay" class="style"><p />

<div style="margin-top:20px;">
<input type="button" value="Process Data" id="button" onClick="buildTable()">
</div>

</form>

<center>
<div id="results" style="margin-top:20px;"></div>
</center>


</div> <!-- ends div#contentwrap -->

</body>
</html>

【问题讨论】:

    标签: javascript css math for-loop while-loop


    【解决方案1】:

    如果您希望输入为每月付款,请不要调用相应的变量numpay

    在您的情况下,不预先计算月数似乎更实际。可以同时使用while循环建表和计算贷款期限:

    function buildTable() {
    
        var amount = parseFloat(document.getElementById("loanAmt").value );
        var monthly = parseInt(document.getElementById("monthlyPay").value );
        var rate = parseFloat(document.getElementById("intRte").value );
    
        rate = rate / 100 / 12;
    
        var m = 0;    // number of months
    
        while (amount > 0) {
            var interest = amount * rate;
            var principal = monthly - interest;
    
            if (principal > amount) {
                principal = amount;
                amount = 0.0;
            } else {
                amount -= principal;
            }
    
            // build table: m + 1, principal, interest, amount
    
            m++;
        }
    
        // display table
    }
    

    【讨论】:

    • 完美运行,变量更有意义。谢谢。
    • 知道为什么当数字小于 1.00 时不会在小数点前输出“0”吗? Ex- 它显示“.99”而不是“0.99”
    • 在插入小数点之前,您需要将您的数字补零,使其比小数点后的小数位数多一,例如,对于fixVal(0.72, 0, 2, ' '),72 将变为 072。在fixVal 的第一个while 循环中将while(stringLength &lt; numberOfDecimals) 更改为while(stringLength &lt; numberOfDecimals + 1)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多