2016-09-28 83 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