1

私は JavaScript の初心者ですが、何が欠けているか教えていただければ幸いです。

基本的に、2 つの入力から大きな値をテストしようとしています。これが私がこれまでに行ったことです:

$('#than_stock_submit').click(function() {
    var pur_rate = $('#pur_rate input').val(),
        sell_rate = $('#sell_rate input').val(),
        msg_div = $('#sell_rate .msg');

    if(greater_than(sell_rate, pur_rate, msg_div)==false){return false}
});

function greater_than(a, b, msg_div){
    msg_div.show().html( '' );
    if(a > b){
        msg_div.show().html( '<p class="success">Sell Rate is good</p>' );
        return true;
    } else {
        msg_div.show().html( '<p class="error">Sell Rate should be increased</p>' );
        return false;
    }
}

いくつかの値で確認しました。1000 より小さい値でテストし、b=500 と a=5000 または b=100 と a=1000 のような両方の値でテストした場合、それは機能します。他の値が機能していません。

その他のテスト値は次のとおりです。

  1. a=751、b=750、結果=true
  2. a=0751、b=750、結果=false
  3. a=551、b=750、結果=false
  4. a=1051、b=750、結果=false
  5. a=7500、b=750、結果=true
  6. a=6000、b=600、結果=true

次のようなコンソールでも確認しました: console.log(a + b);

コンソール ウィンドウの結果は、1000750 (値が a=1000 & b=750 のような場合) または 0752750 (値が a=0752 & b=750 のような場合) のようになります。

ありがとう。

4

4 に答える 4

3

比較する前に、文字列を数値に変換する必要があります ( を使用すると文字列になります.val())。parseIntまたはを使用parseFloat:

function greater_than(a, b, msg_div){
    a = parseInt(a, 10);
    b = parseInt(b, 10);
    // etc
于 2012-09-18T14:05:10.963 に答える
0

より堅牢なソリューションを次に示します (実行しているのは文字列の比較であり、数値の比較ではありません)。

function greater_than(a,b) {
  // first, convert both passed values to numbers
  // (or at least try)
  var nA = new Number(a),
      nB = new Number(b);

  // check if they were converted successfully.
  // isNaN = is Not a Number (invalid input)
  if (!isNan(nA) && !isNaN(nB)) {
    // now go ahead and perform the check
    msg_div.empty().show();
    if (nA > nB) {
      $('<p>',{'class':'success'})
        .text('Sell Rate is good')
        .appendTo(msg_div);
      return true;
    } else {
      $('<p>',{'class':'error'})
        .text('Sell Rate should be increased')
        .appendTo(msg_div);
    }
  }
  // In case you wanted to handle showing an error for
  // invalid input, you can uncomment the following lines
  // and take the necessary action(s)
  else{
    /* one of them was not a number */
  }
  return false;
}

jQuery を使用して、<p>追加した をビルドしたことに注意してください。.empty()assingning の代わりに も使用しまし.html('')た。

そしていくつかのドキュメント:

于 2012-09-18T14:25:43.570 に答える
0

文字列を比較していて、"1000">"99"間違っています。

解決策は、最初にparseIntまたはparseFloatを使用して数値を解析することです。

 var pur_rate = parseFloat($('#pur_rate input').val());

また

 var pur_rate = parseInt($('#pur_rate input').val(), 10);
于 2012-09-18T14:04:12.760 に答える
0

入力値を読み取ると文字列が返されます。したがって、文字列を文字列と比較すると、数値比較ではなく ASCII 比較になります。使用してparseInt(value, 10);ください基数を忘れないでください!;)

于 2012-09-18T14:07:53.793 に答える