2016-11-29 60 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,這大概應該是一個代替