Periksa apakah suatu nilai berada dalam kisaran angka


110

Saya ingin memeriksa apakah suatu nilai dalam kisaran yang diterima. Jika ya, untuk melakukan sesuatu; jika tidak, sesuatu yang lain.

Rentangnya adalah 0.001-0.009. Saya tahu cara menggunakan beberapa ifuntuk memeriksa ini, tetapi saya ingin tahu apakah ada cara untuk memeriksanya dalam satu ifpernyataan.


14
&&operator? ...
Šime Vidas

Jawaban:


218

Anda mengajukan pertanyaan tentang perbandingan numerik, jadi ekspresi reguler benar-benar tidak ada hubungannya dengan masalah tersebut. Anda tidak memerlukan ifpernyataan " beberapa " untuk melakukannya, baik:

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

Anda bisa menulis sendiri fungsi "antara ()":

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

Pengodean Anda bagus tetapi tidak sesuai dengan pertanyaannya, itu saja. Tanpa bermaksud menyinggung. Saya selalu menilai solusi dari seberapa baik solusi tersebut menjawab pertanyaan. Itu karena saya biasanya berasumsi orang tahu apa yang mereka minta. Tanda centang menunjukkan kepada saya bahwa ini tidak terjadi pada penanya.
Leif

7
Yah, saya menghargai apa yang Anda katakan, tetapi saya menyarankan agar Anda mempertimbangkan kembali premis bahwa orang-orang di sini pada umumnya "tahu apa yang mereka minta." Itu mungkin benar dalam arti yang sangat sempit , tetapi seringkali pertanyaan-pertanyaan ini mencerminkan beberapa keputusan desain yang buruk yang harus ditinjau kembali. Saya telah menjawab pertanyaan pemrograman selama sekitar 30 tahun sekarang, jadi saya telah melihatnya terjadi berkali-kali. Saya tentu saja lebih suka pertanyaan yang lebih baik, di mana tujuan keseluruhan dijelaskan dengan jelas. Di sini, kami benar-benar tidak mengetahui alasan pertanyaan tersebut, jadi kami tidak memiliki konteks.
Pointy

6
Saya suka menggunakan sintaks seperti ini: if (0,001 <= x && x <= 0,009) {...} tampaknya sedikit lebih jelas bagi saya :)
Omri

50

Ini adalah opsi dengan hanya satu perbandingan.

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

Ini bagus, tidak masalah jika min lebih rendah atau maks lebih rendah itu masih akan berfungsi. Bahkan mungkin lebih baik untuk memanggil min, max sesuatu seperti start, end. algo baik terima kasih!
James Harrington

19

Jika Anda harus menggunakan regexp (dan sungguh, sebaiknya tidak!) Ini akan berfungsi:

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

harus bekerja, yaitu

  • ^ tidak ada sebelumnya,
  • diikuti oleh 0.00(nb: escape backslash untuk .karakter)
  • diikuti dengan 1 sampai 8, dan sejumlah digit tambahan
  • atau 9, diikuti dengan sejumlah nol
  • $: diikuti oleh yang lain

8

Jika Anda sudah menggunakan lodash, Anda dapat menggunakan inRange()fungsi: 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

Saya suka betweenfungsi Pointy jadi saya menulis yang serupa yang bekerja dengan baik untuk skenario saya.

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

jadi jika Anda ingin melihat apakah xberada dalam ± 10 dari y:

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

Saya menggunakannya untuk mendeteksi pers lama di ponsel:

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

Jika Anda ingin kode Anda memilih rentang digit tertentu, pastikan untuk menggunakan &&operator alih-alih ||.

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

Anda harus ingin menentukan batas bawah dan atas sebelum menulis kondisi

function between(value,first,last) {

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

}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.