Kiểm tra xem một giá trị có nằm trong một dải số không


109

Tôi muốn kiểm tra xem một giá trị có nằm trong phạm vi được chấp nhận hay không. Nếu có, để làm điều gì đó; nếu không, một cái gì đó khác.

Phạm vi là 0.001-0.009. Tôi biết cách sử dụng nhiều ifđể kiểm tra điều này, nhưng tôi muốn biết liệu có cách nào để kiểm tra nó trong một ifcâu lệnh duy nhất hay không .


14
&&nhà điều hành? ...
Šime Vidas

Câu trả lời:


216

Bạn đang đặt câu hỏi về so sánh số, vì vậy, biểu thức chính quy thực sự không liên quan gì đến vấn đề này. Bạn cũng không cần ifcâu lệnh " nhiều " để làm điều đó:

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

Bạn có thể viết cho mình một hàm "between ()":

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

Mã của bạn là tốt nhưng nó không phù hợp với câu hỏi, vậy thôi. Không xúc phạm. Tôi luôn đánh giá một giải pháp bằng cách nó trả lời câu hỏi tốt như thế nào. Đó là bởi vì tôi thường cho rằng mọi người biết những gì họ đang yêu cầu. Dấu kiểm cho tôi thấy đây không phải là trường hợp của người hỏi này.
Leif

7
Chà, tôi đánh giá cao những gì bạn đang nói, nhưng tôi khuyên bạn có thể muốn xem xét lại tiền đề rằng mọi người ở đây thường "biết họ đang yêu cầu điều gì." Điều đó có thể đúng theo nghĩa hẹp , nhưng thường thì những câu hỏi này phản ánh một số quyết định thiết kế tồi cần được xem xét lại. Tôi đã trả lời các câu hỏi về lập trình trong khoảng 30 năm nay, vì vậy tôi đã thấy nó xảy ra nhiều lần. Tất nhiên, tôi thích những câu hỏi hay hơn, trong đó mục tiêu tổng thể được giải thích rõ ràng. Ở đây, chúng tôi thực sự không biết lý do của câu hỏi, vì vậy chúng tôi không có ngữ cảnh.
Pointy

6
Tôi như sử dụng cú pháp như sau: if (0,001 <= x && x <= 0.009) {...} có vẻ hơi rõ ràng hơn đối với tôi :)
Omri

49

Đây là một tùy chọn chỉ có một so sánh duy nhất.

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

Điều này thật tuyệt, không quan trọng nếu min thấp hơn hay max thấp hơn thì nó vẫn hoạt động. Trong thực tế, có thể tốt hơn nếu gọi min, max một cái gì đó như start, end. tuyệt vời cả hai cách cảm ơn!
James Harrington

19

Nếu bạn phải sử dụng regexp (và thực sự, bạn không nên!), Điều này sẽ hoạt động:

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

nên làm việc, tức là

  • ^ không có gì trước đây,
  • theo sau là 0.00(nb: dấu gạch chéo ngược thoát cho. ký tự)
  • theo sau là 1 đến 8 và bất kỳ số chữ số bổ sung nào
  • hoặc 9, theo sau là bất kỳ số 0 nào
  • $: theo sau không có gì khác

8

Nếu bạn đã sử dụng lodash, bạn có thể sử dụng inRange()chức năng: 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

Tôi thích betweenchức năng của Pointy nên tôi đã viết một chức năng tương tự hoạt động tốt cho kịch bản của tôi.

/**
 * 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;
}

vì vậy nếu bạn muốn xem có xnằm trong phạm vi ± 10 của y:

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

Tôi đang sử dụng nó để phát hiện báo chí lâu trên thiết bị di động:

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

Nếu bạn muốn mã của mình chọn một dải chữ số cụ thể, hãy đảm bảo sử dụng &&toán tử thay vì ||.

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

Bạn phải xác định giới hạn dưới và giới hạn trên trước khi viết điều kiện

function between(value,first,last) {

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

}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.