जांचें कि क्या मान संख्याओं की एक सीमा के भीतर है


109

मैं यह जांचना चाहता हूं कि क्या मान किसी स्वीकृत सीमा में है। यदि हाँ, तो कुछ करने के लिए; अन्यथा, कुछ और।

सीमा है 0.001-0.009। मुझे पता है कि इसे ifजांचने के लिए एकाधिक का उपयोग कैसे किया जाए , लेकिन मैं जानना चाहता हूं कि क्या किसी एकल ifकथन में इसे जांचने का कोई तरीका है ।


14
&&ऑपरेटर? ...
विद्या

जवाबों:


218

आप संख्यात्मक तुलनाओं के बारे में एक सवाल पूछ रहे हैं, इसलिए नियमित अभिव्यक्तियों का वास्तव में इस मुद्दे से कोई लेना-देना नहीं है। आपको इसे करने के लिए "एकाधिक if" कथन की आवश्यकता नहीं है :

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

आप अपने आप को "बीच ()" फ़ंक्शन लिख सकते हैं:

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

आपका कोडिंग अच्छा है, लेकिन यह सवाल फिट नहीं है, बस। कोई अपराध नहीं। मैं हमेशा इस सवाल का जवाब देता हूं कि यह कितना अच्छा है। ऐसा इसलिए है क्योंकि मैं आमतौर पर लोगों को जानता हूं कि वे क्या पूछ रहे हैं। चेकमार्क मुझे दिखाता है कि इस प्रश्नकर्ता के साथ ऐसा नहीं था।
लीफ

7
ठीक है, मैं सराहना करता हूं कि आप क्या कह रहे हैं, लेकिन मेरा सुझाव है कि आप इस आधार पर पुनर्विचार करना चाहते हैं कि यहां के लोग आमतौर पर "जानते हैं कि वे क्या पूछ रहे हैं।" यह बहुत संकीर्ण अर्थों में सही हो सकता है , लेकिन अक्सर ये प्रश्न कुछ खराब डिजाइन निर्णय को दर्शाते हैं जिन्हें फिर से देखना चाहिए। मैं अब लगभग 30 वर्षों से प्रोग्रामिंग सवालों के जवाब दे रहा हूं, इसलिए मैंने कई बार ऐसा देखा है। मैं निश्चित रूप से बेहतर सवालों को पसंद करता हूं, जिसमें समग्र लक्ष्य स्पष्ट रूप से समझाया गया है। यहां, हमें वास्तव में प्रश्न के कारण का कोई पता नहीं है , इसलिए हमारे पास कोई संदर्भ नहीं है।
प्वाइंट

6
मुझे इस तरह से वाक्य रचना का उपयोग करना पसंद है: अगर (0.001 <= x && x <= 0.009) {...} मुझे थोड़ा स्पष्ट लगता है :)
ओमरी

50

यहां केवल एक ही तुलना के साथ एक विकल्प है।

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

यह मीठी है इससे कोई फर्क नहीं पड़ता अगर न्यूनतम है या अधिकतम कम है तो भी यह काम करेगा। वास्तव में, न्यूनतम कॉल करना बेहतर हो सकता है, अधिकतम कुछ जैसे स्टार्ट, एंड। महान अहंकार या तो धन्यवाद!
जेम्स हैरिंगटन

19

यदि आपको एक regexp का उपयोग करना चाहिए (और वास्तव में, आपको नहीं करना चाहिए!) यह काम करेगा:

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

काम करना चाहिए, यानी

  • ^ पहले कुछ भी नहीं,
  • के बाद 0.00 (नायब: बैकस्लैश भागने के लिए). चरित्र के )
  • 8 के माध्यम से 1 के बाद, और अतिरिक्त अंकों की संख्या
  • या 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;
}

इसलिए यदि आप यह देखना चाहते हैं कि क्या see x10 के भीतर है 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 ;

}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.