web-dev-qa-db-ja.com

値が数値の範囲内にあるかどうかを確認します

値が許容範囲内にあるかどうかを確認したい。はいの場合、何かをする。そうでなければ、何か他のもの。

範囲は0.001-0.009です。複数のifを使用してこれを確認する方法は知っていますが、単一のifステートメントで確認する方法があるかどうかを知りたいです。

76
Sotiris

あなたは数値比較について質問しているので、正規表現は本当に問題とは関係ありません。それを行うために「複数のif」ステートメントは必要ありません。

if (x >= 0.001 && x <= 0.009) {
  // something
}

自分で「between()」関数を書くことができます。

function between(x, min, max) {
  return x >= min && x <= max;
}
// ...
if (between(x, 0.001, 0.009)) {
  // something
}
175
Pointy

以下に、単一の比較のみのオプションを示します。

// return true if in range, otherwise false
function inRange(x, min, max) {
    return ((x-min)*(x-max) <= 0);
}

console.log(inRange(5, 1, 10));     // true
console.log(inRange(-5, 1, 10));    // false
console.log(inRange(20, 1, 10));    // false
22
Alexander

must正規表現を使用する場合(そして、実際、そうすべきではありません!)、これは動作します:

/^0\.00([1-8]\d*|90*)$/

動作するはずです、つまり.

  • ^以前は何もありませんでしたが、
  • その後に0.00(nb:.文字のバックスラッシュエスケープ)
  • 1から8、および任意の数の追加の数字が続きます
  • または9、その後に任意の数のゼロが続く
  • $:他に何も続かない
17
Alnitak

Pointyのbetween関数が好きなので、自分のシナリオでうまく機能する同様の関数を作成しました。

/**
 * Checks if an integer is within ±x another integer.
 * @param {int} op - The integer in question
 * @param {int} target - The integer to compare to
 * @param {int} range - the range ±
 */
function nearInt(op, target, range) {
    return op < target + range && op > target - range;
}

xyの±10以内にあるかどうかを確認したい場合:

var x = 100;
var y = 115;
nearInt(x,y,10) = false

私はモバイルで長押しを検出するためにそれを使用しています:

//make sure they haven't moved too much during long press.
if (!nearInt(Last.x,Start.x,5) || !nearInt(Last.y, Start.y,5)) clearTimeout(t);
2
Scott Beeson

コードで特定の範囲の数字を選択する場合は、&&の代わりに||演算子を使用してください。

if (x >= 4 && x <= 9) {
  // do something
} else {
  // do something else
}

// be sure not to do this

if (x >= 4 || x <= 9) {
  // do something
} else {
  // do something else
}
0
Favor George