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


109

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

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


14
&&オペレーター?...
サイムVIDAS

回答:


216

数値比較について質問しているので、正規表現は実際には問題とは関係ありません。次の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
}

あなたのコーディングは良いですが、それは問題に適合しません、それだけです。攻撃はありません。私は常に、それが質問にどれだけうまく答えるかによって解決策を判断します。それは、私は一般的に人々が求めていることを知っていると想定しているからです。チェックマークは、これがこの質問者には当てはまらなかったことを示しています。
Leif

7
まあ、私はあなたが言っていることを感謝しますが、私はあなたがここにいる人々が一般に「彼らが求めているものを知っている」という前提を再考したいと思うかもしれません。それは非常に狭い意味で当てはまるかもしれませんが、これらの質問はしばしば、再検討すべきいくつかの悪い設計決定を反映しています。私はプログラミングの質問に30年ほど答えてきたので、それが何度も起こるのを見てきました。もちろん、全体的な目標が明確に説明されているより良い質問を好む。ここでは、本当に、質問理由がまったくわからないので、コンテキストはありません。
とがった

6
私はこのような構文を使用するのが好きです:if(0.001 <= x && x <= 0.009){...}は私には少し明確に思えます:)
オムリ

49

これは、比較が1つだけのオプションです。

// 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

これは甘いです。minが低くてもmaxが低くても問題ありません。実際には、開始、終了などの最小値、最大値を呼び出す方がよい場合があります。いずれにせよ素晴らしいアルゴありがとう!
James Harrington

19

正規表現を使用する必要がある場合(実際に使用しないでください!)、これは機能します。

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

動作するはず、すなわち

  • ^ これまでに、
  • 続いて0.00(nb:のバックスラッシュエスケープ.
  • 1から8、および任意の数の追加の数字が続く
  • または9、その後に任意の数のゼロ
  • $:その後に続く

8

を既に使用している場合はlodash、次のinRange()関数を使用できます:https : //lodash.com/docs/4.17.15#inRange

_.inRange(3, 2, 4);
// => true

_.inRange(4, 8);
// => true

_.inRange(4, 2);
// => false

_.inRange(2, 2);
// => false

_.inRange(1.2, 2);
// => true

_.inRange(5.2, 4);
// => false

_.inRange(-3, -2, -6);
// => true

3

私はポインティの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;
}

したがって、x±10以内であるかどうかを確認したい場合y

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);

1

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

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

条件を書き込む前に下限と上限を決定する必要があります

function between(value,first,last) {

 let lower = Math.min(first,last) , upper = Math.max(first,last);
 return value >= lower &&  value <= upper ;

}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.