2016-11-29 26 views
0

我是JavaScript的全新用户,并且仅将该课程作为要求。我必须为这个班级订购我几乎已经工作的订单,但是当我添加数量时,$ NaN弹出到我的最终总计中,并且我无法获得税号和最终总数以四舍五入到小数点后两位地方。任何帮助将不胜感激!试图删除NaN并舍入合计

<!DOCTYPE html> 
<html> 
    <head> 
     <title> Order Form Project </title> 
     <style> 
     /* Style the input box */ 
      .tbl 
      { 
       border: 2px solid green; 
      { 
      .center 
      { 
       text-align: center; 
      } 
      .right 
      { 
       text-align: right; 
      } 
      .left 
      { 
       text-align: left; 
      } 
     .inBox 
     { 
     text-align: right;    
     width:  50px;    
     border:  1px green; 
     } 

     /* Style the button */ 
     .btn 
     { 
     width:  90px;   /* Fixed size of 120px */ 
     font-size: 0.9em;   /* Larger font */ 
     font-weight:bold;    /* Bold */ 
       align: left; 
     } 
     .btn:hover 
     { 
     background-color: pink;  /* Change mouse over color */ 
     } 
    </style> 
    <script type="text/javascript"> 
    function count(a,p,s) 
{ 
    a.line_sum[p].value = a.line[p].value * s; 
    a.line_sum[p].value = Math.ceil(a.line_sum[p].value * 1000) /1000; 
    a.line_sum[p].value = Math.floor(a.line_sum[p].value * 1000) /1000; 
    a.line_sum[p].value = Math.round(a.line_sum[p].value * 100)/100; 
    if(a.line_sum[p].value == "NaN") 
    { 
    alert("Error: Check for mistakes"); 
    a.line[p].value = a.line[p].value.substring(0, a.line[p].value.length-1); 
    a.line_sum[p].value = a.line[p].value * s; 
    if(a.line_sum[p].value == "0") a.line_sum[p].value = ""; 
    } 
    else 
    { 
    var gt = 0; 
    for(i=0; i < a.line_sum.length; i++) 
    { 
     gt += Math.ceil(a.line_sum[i].value * 1000) /1000; 
    } 
    gt = Math.round(gt * 1000)/1000; 
    a.grand_total.value = "$ " + gt; 
    decimal(a); 
    } 
} 

function get_data(a) 
{ 
    // var order_data = "This Order is ...\n"; 
    // for(i=0; i < a.line.length; i++) 
    // { 
    // if(a.line[i].value == "") a.line[i].value = "0"; 
    // order_data += "Line " +i+ " = "+a.line[i].value +" Qty\n"; 
    // } 
    // if(a.grand_total.value == "") a.grand_total.value = "Nil"; 
    // order_data += "Total Order Value = " + a.grand_total.value; 
    // document.g.order.value = order_data; 

    var apples = 0 + document.getElementById("apples_total").value; 
    var grapes = 0 + document.getElementById("grapes_total").value; 
    var pears = 0 + document.getElementById("pears_total").value; 
    var sub_total = 0; 
    var tax_total = 0; 
    var grand_total = 0; 
    sub_total = +apples + +grapes + +pears; 
    tax_total = +sub_total * +0.06; 
    grand_total = +sub_total + +tax_total; 

    debugger; 
    document.getElementById("sub_total").value = sub_total; 
    document.getElementById("tax_total").value = tax_total; 
    document.getElementById("grand_total").value = grand_total; 

} 

function decimal(a) 
{ 
    for(i=0; i<a.line_sum.length; i++) 
    { 
    var d = a.line_sum[i].value.indexOf("."); 
    if(d == -1 && a.line[i].value != 0) a.line_sum[i].value += ".00"; 
    if(d == (a.line_sum[i].value.length-2)) a.line_sum[i].value += "0"; 
    if(a.line_sum[i].value == "00") a.line_sum[i].value=""; 
    } 
    d = f.grand_total.value.indexOf("."); 
    if(d == -1) f.grand_total.value += ".00"; 
    if(d == (f.grand_total.value.length-2)) f.grand_total.value += "0"; 
} 

function send_data(g) 
{ 
    get_data(document.a); 
    if(document.a.grand_total.value == "Zero") 
    { 
    var conf = confirm("No items are entered"); 
    if(conf)g.submit(); else init(); 
    } 
    else g.submit(); 
} 
    </script> 
     <body> 
      <form name="a"> 
       <table color="solid green" border="2" width="300" cellpadding="4" cellspacing="0" summary=""> 
        <tbody> 
         <tr> 
       <td colspan="4" align="center"><b>Order Form</b></td> 
      </tr> 
      <tr> 
         <th>Quantity</th> 
      <th>Item</th> 
      <th>Unit Price</th> 
      <th align="right">Extension</th> 
      </tr> 
         <tr> 
       <td><input name="line" type="text" size="10" value="" onkeyup="count(this.form,0,5.49)"></td> 
         <th>Apples</th><td class="right">$5.49</td><td align="right"><input name="line_sum" type="text" size="10" id="apples_total" readonly></td> 
      </tr> 
         <tr> 
       <td><input name="line" type="text" size="10" value="" onkeyup="count(this.form,1,7.49)"></td> <th>Pears</th><td class="right">$7.49</td> 
         <td align="right"><input name="line_sum" type="text" size="10" id="pears_total" readonly></td></tr> 
         <tr> 
       <td><input name="line" type="text" size="10" value="" onkeyup="count(this.form,2,6.49)"> 
         </td><th>Grapes</th><td class="right">$6.49</td><td align="right"><input name="line_sum" type="text" size="10" id="grapes_total" readonly></td></tr> 
         <tr><td><input name="line" type="text" size="10" value="" onkeyup="count(this.form,3,)"></td> 
         <th colspan="2" align="right">Totals</th><td><input name="line" type="text" size="10" id="sub_total" readonly"></td></tr> 
         <tr><th colspan="3" align="right"> Tax @ 6%</th><td><input name="line" type="text" size="10" id="tax_total" readonly></td></tr> 
         <tr><td colspan="1" align="center"><input type="button" value="Compute" onclick="get_data(this.form)"></td><th colspan="2" align="right"> Final Total</th><td><input name="line_sum" type="text" size="10" id="grand_total" readonly> 
      </td> 
         </tr> 
        </tbody> 
       </table> 
      </form> 
     </body> 
</html> 
+0

这方面的工作,但我只是想说万物编程的爱,请不要使用单个字母的变量名。谢谢=) – mhodges

+0

NaN意味着不是一个数字。做一个console.log(gt)并找出它为什么没有你期望的值 – Ben

回答

0

你正在通过添加“.00”字符串,这是非常不切实际的。

使用数字处理..好..数学一般:P

parseFloat(YourVariable).toFixed(2) 

也,请记住,如果你已经在那里污染数据,你可能有奇怪的东西,如“FREE”,而不是一个实际的号码,你可以这样预先检查

if(isNaN(YourVariable)){ 
    return "moo! this is pollution and my code should be green!"; 
} 

玩得开心!

+0

只要我把parseFloats放进去,它就完全停止了计算?我把它们放在我定义变量的函数中,例如var apples = 0 + document.getElementById(“apples_total”).value,然后添加parseFloat或者是否需要打开一个新函数? –

+0

我需要搬回家,以后再回答你的问题,将代码集成到你在问题中留下的代码中,对不起因为不清楚 –

0

这是什么原因造成的NaN

grand_total输入具有line_sum类,并因此它被处理,参与总的总和。但是,这个投入就是总的投入!由于您用一美元前缀该金额,它会导致NaN在下一次再次计算总和时出现。

通过从该输入元素中移除该类来解决此问题。

那么你也存在这些问题:

  • 语法错误onkeyup="count(this.form,3,) - 第三个参数丢失。
  • 未定义的变量˚F,这大概应该是一个代替