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.

Sotiris
sumber
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
}
Runcing
sumber
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
Alexander
sumber
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
Alnitak
sumber
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
Haroldo_OK
sumber
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);
Pengacara Iblis
sumber
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
}

Mendukung George
sumber
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 ;

}
Steve KACOU
sumber