2016-11-29 7 views
0

私はJavaScriptの新機能を備えています。私はこのクラスのオーダーフォームを作成しなければなりません。ほとんどの場合、$ NaNは最終的な合計でポップアップします。数量を追加すると、税番号と最終的な合計数を2小数点以下に丸めることはできません場所。どんな助けでも大歓迎です!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

でなければなりません F

  • 未定義の変数、が、私はちょうどSINGLE LETTER変数名を使用しないでください、プログラミングすべてのものへの愛のために言いたいです。ありがとうございます=) – 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クラスがあり、そしてその結果として、それが全体の合計に参加するために処理されます。しかし、その入力は合計が置かれる場所です!その合計の前に1ドルを付けるので、合計が再び計算される次の時刻にNaNが表示されます。

    これを解決するには、その入力要素からそのクラスを削除します。 - 第三引数が欠落している

    • 構文エラーonkeyup="count(this.form,3,)中:

      は、その後、あなたはまた、これらの問題を持っています。おそらく、この上で作業する代わり
    関連する問題