2016-09-28 138 views
1

晚上好!我正在教自己編碼。現在,我正在製作一個JavaScript貸款計算器,但我遇到了一個問題。如果我把0%的利息,我的輸出文本框中什麼都不顯示。其他的一切都很完美。任何幫助,將不勝感激。謝謝!計算0%的利息?

<!DOCTYPE html> 
<html> 
<head> 
<title>JavaScript Loan Calculator</title> 
<style type="text/css"> 
    .auto-style1 { 
text-align: left; 
    } 

    .auto-style2 { 
font-size: larger; 
color: #FFF; 
font: Georgia; 
    } 

    .auto-style3 { 
width: 82px; 
text-align: center; 
style="float: right; 
    } 

    table { 
background-color: #F5F5F5; 
width: 400px; 
height: 300px; 
padding-left: 20px; 
padding-bottom: 20px; 
padding-top: 20px; 
    } 

    body { 
     background-color: #d2691e; 
    } 

</style> 
</head> 
<body> 
<form name="loaninfo"> 
<div class="auto-style1"> 
     <p><strong> 
      <span class="auto-style2"> </span></strong><strong><span class="auto-style2"><br /> 
     </span></strong></p> 
    </div> 
    <table width="327"> 
     <tr><td colspan="3"></td></tr> 
     <tr> 

<td>Loan Amount:</td> 
      <td> 
       $ 
       <input type="text" name="principal" size="12" title="textfield" pattern="([0-9]+\.)?[0-9]+" > 
      </td> 
     </tr> 
     <tr> 
      <td>Interest Rate:</td> 
      <td> 
       &nbsp;&nbsp; 
       <input type="text" name="interest" size="12" title="textfield" pattern="([0-9]+\.)?[0-9]+" > 
       % 
      </td> 
     </tr> 
     <tr> 
      <td>Number of Years for Loan:</td> 
      <td> 
       &nbsp;&nbsp; 
       <input type="text" name="years" size="12" title="textfield" pattern="([0-9]+\.)?[0-9]+" > 
      </td> 
     </tr> 
     <tr> 
      <td colspan="3"><input type="button" class="auto-style3" onClick="calculate();" value="Calculate"> 
       <br /> 
       <br /> 
      </td> 
     </tr> 
     <tr> 
      <td colspan="3"> 
       <b>Your Payment Information</b> 
      </td> 
     </tr> 
     <tr> 
      <td>Monthly Payment Amount:</td> 
      <td>$ <input type="text" name="payment" size="12" readonly /></td> 
     </tr> 
     <tr> 
      <td>Total Payment Amount:</td> 
      <td>$ <input type="text" name="total" size="12" readonly ></td> 
     </tr> 
     <tr> 
      <td>Total Interest Payments:</td> 
      <td>$ <input type="text" name="totalinterest" size="12" readonly /> </td> 
     </tr> 
     <tr> 
      <td colspan="3"> 
       <input type="reset" class="auto-style3" /> 
      </td> 
     </tr> 
    </table> 
</form> 
<script language="JavaScript"> 

function calculate() { 

var principal = document.loaninfo.principal.value; 
var months_in_year = 12 
var interest = document.loaninfo.interest.value/100/months_in_year; 
var payments = document.loaninfo.years.value * months_in_year; 
var x = Math.pow(1 + interest, payments); 
var monthval = (principal*x*interest)/(x-1); 

if (!isNaN(monthval) && 
    (monthval != Number.POSITIVE_INFINITY) && 
    (monthval != Number.NEGATIVE_INFINITY)) { 

    document.loaninfo.payment.value = round(monthval); 
    document.loaninfo.total.value = round(monthval * payments); 
    document.loaninfo.totalinterest.value = round((monthval * payments) - principal); 
} 

else { 
    document.loaninfo.payment.value = ""; 
    document.loaninfo.total.value = ""; 
    document.loaninfo.totalinterest.value = ""; 
} 

function round(x) { 
return Math.round(x*100)/100; 
} 

function jsDecimals(e) { 

var evt = (e) ? e : window.event; 
var key = (evt.keyCode) ? evt.keyCode : evt.which; 
if (key != null) { 
    key = parseInt(key, 10); 
    if ((key < 48 || key > 57) && (key < 96 || key > 105)) { 
     if (!jsIsUserFriendlyChar(key, "Decimals")) { 
      return false; 
     } 
    } 
    else { 
     if (evt.shiftKey) { 
      return false; 
     } 
    } 
} 
return true; 
} 

form.onsubmit = function() { 
return textarea.value.match(/^\d+(\.\d+)?$/); 
} 
</script> 

+0

也許是因爲'interest === 0'部分?它將一切設置爲空... – epascarello

+0

哎呀,那是我的舊代碼。更新。感謝您指出了這一點! – BoyGeorge

+0

monthval將是'NaN' - 因此清除值的其他代碼將會運行 –

回答

0

這是因爲這部分代碼的。

else if (interest == 0) { 
    document.loaninfo.payment.value = ""; 
    document.loaninfo.total.value = ""; 
    document.loaninfo.totalinterest.value = ""; 
} 

當興趣爲0時,您將所有輸出框的值設置爲空字符串。

您應該更換作業的RHS。

+0

這是我的舊代碼,但是我修復了它。它似乎還沒有工作。 – BoyGeorge

+0

您是否已將計算的興趣值記錄到控制檯中? –

4

當你把0您得到

var x = Math.pow(1 + interest, payments); // 1 
var monthval = principal * x * interest/(x - 1); //NaN because 1-1 in fraction is 0 so it returns 0/0 and it's NaN 

你可以改變你的代碼是這樣的:

if (interest===0){ 
var monthval = (principal)/(months_in_year); 
} else { 
var monthval = (principal*x*interest)/(x-1); 
} 

工作版本:http://codepen.io/mhadaily/pen/ZpypdA

隨意更改它是就像你想要的一樣。

+0

非常感謝!它現在很好用!對不起,我還無法登錄。 – BoyGeorge