2016-08-27 12 views
-1

私は単純なVAT計算機を持っていますが、計算の1つで面白いことがあります。問題は、最後のコラムにある、ママたちのことです。 e = a + d * 0.25は正しいですが、以下のコードは正しくありません。計算には大きすぎます。JS計算の問題

JSコード:

$(document).ready(function() { 

$('#submit').click(function() { 
    //get cost and check value 
    var cost = $('#cost').val(); 
    var check = $('#checkBox'); 

    if (cost != null && cost != "") { 
     if (cost < 350) { 
      //c = a * 1 
      $('#total').val(cost); 
      $('#toll').val(""); 
      $('#moms').val(""); 
     } else { 
      if (check.is(':checked')) { 
       //c = a* 1.107* 1.25 
       $('#total').val((cost * 1.107 * 1.25).toFixed(2)); 
       //d = a * 0.107 
       $('#toll').val((cost * 0.107).toFixed(2)); 
      } else { 
       $('#total').val((cost * 1.25).toFixed(2)); 
       $('#toll').val(""); 
       $('#moms').val(""); 
      } 
      if ($('#toll').val() != null && $('#toll').val() != "") { 
       //e = (a + d) * 0.25 
       var moms = (cost + $('#toll').val()) * 0.25; 
       $('#moms').val(moms.toFixed(2)); 
      } 
     } 

    } 
}) 

})。

答えて

3

入力要素の値は常に文字列です。ほとんどのコードでは、暗黙的に数値に変換されるような方法で「コスト」値を使用しています。しかし、+演算子は異なっており、追加する文字列連結を優先して実行します。

明示的にあなたがそれを初期化すると、物事はより良い動作するはず数であるように、コストを強制する場合:

var cost = +$('#cost').val(); 

単項+オペレータをリードする数として扱われる文字列値を強制すること。さて、文字列はかなりの数のように見えない場合はもちろん、その後、costNaNに設定されますので、あなたはそれをチェックする必要があります

costがある場合は、あなたの現在のチェックが見に置き換えることができます
if (!isNaN(cost)) { 

空ではない。 JavaScriptを+オペレータが実際に文字列を好き

  var moms = (cost + +$('#toll').val()) * 0.25; 

編集申し訳ありませんが、あなたは次のようになるようにラインが見える$('#toll').val()の値を変換することも必要があります。

+0

私はそれを理解しませんでした。コードやJSのフィドルを変更できますか? –

+0

必要な変更は、私の答え@NikhilAgarwalにあります。 – Pointy

+0

なぜ '' 'var cost = + $( '#cost').val();' ''が行われたのか理解しました。これは文字列値を強制的に数値として扱います。今、なぜ '' 'if(!isNaN(cost)){' ''が完了し、関数を呼び出した後に何をするのか? –