जांचें कि क्या किसी संख्या में दशमलव स्थान है / पूरी संख्या है


284

मैं यह जांचने के लिए जावास्क्रिप्ट में एक आसान तरीका खोज रहा हूं कि क्या किसी संख्या में दशमलव स्थान है (यह निर्धारित करने के लिए कि यह पूर्णांक है)। उदाहरण के लिए,

23 -> OK
5 -> OK
3.5 -> not OK
34.345 -> not OK
if(number is integer) {...}

जवाबों:


820

मापांक का उपयोग करने से काम होगा:

num % 1 != 0
// 23 % 1 = 0
// 23.5 % 1 = 0.5

ध्यान दें कि यह प्रारूप की परवाह किए बिना संख्या के संख्यात्मक मूल्य पर आधारित है । यह संख्यात्मक दशमलव को पूर्णांक के साथ एक निश्चित दशमलव बिंदु के साथ पूर्णांक के समान मानता है:

'10.0' % 1; // returns 0
10 % 1; // returns 0
'10.5' % 1; // returns 0.5
10.5 % 1; // returns 0.5

10
मैंने वोट नहीं डाला, लेकिन मैं 20.0 के साथ इसके कुछ करने के लिए कहूंगा, अभी भी एक दशमलव बिंदु है और उपरोक्त को संतुष्ट करता है। +1 मुझे वैसे भी मुझे कुछ नया सिखाने के लिए :)
अबे पेट्रिलो

7
@ आबे: काफी सच, हालांकि मुझे लगता है कि इसकी संभावना कम है। यह कहना असंभव है कि क्या 20.0कोई दशमलव बिंदु प्रोग्रामेटिक रूप से है, जब तक कि इसे स्ट्रिंग के रूप में व्यक्त नहीं किया जाता है। इसके अलावा, अन्य समाधानों में से किसी को भी इससे निपटने के लिए वोट नहीं मिला ;-)
एंडी ई

1
@ उत्तर: ऊपर टिप्पणी देखें। जब कोई संख्या मान के रूप में प्रतिनिधित्व करता है, तो 0.00 जावास्क्रिप्ट में 0.00 नहीं है। इसे एक स्ट्रिंग ("0.00") के रूप में दर्शाया जा सकता है, जिस स्थिति में उसके लिए प्रश्न "चेक है कि क्या एक स्ट्रिंग एक पूर्ण संख्या है" के बजाय "जांचें कि क्या एक संख्या पूर्ण संख्या है"
एंडी ई

3
@Swanidhi: आपका क्या मतलब है? क्या मान्य नहीं होगा? "10."एक पूरी संख्या है और परिणाम के रूप में बिल्कुल वैसा ही हो जाएगा "10"या 10
एंडी ई

3
ओपी पता चल सके कि एक के बारे में पूछता है संख्या एक पूर्ण संख्या है। वह कहीं भी तार का उल्लेख नहीं करता है - उस संबंध में, एंडी का जवाब सही है।
ओम शंकर

58
Number.isInteger(23);  // true
Number.isInteger(1.5); // false
Number.isInteger("x"); // false: 

Number.isInteger () ES6 मानक का हिस्सा है और IE11 में समर्थित नहीं है।

यह के लिए झूठे रिटर्न NaN, Infinityऔर गैर-संख्यात्मक तर्क जबकि x % 1 != 0रिटर्न सच।


2
समाधान 12.0 के लिए विफल रहता है
विकास अरोड़ा

@VikasArora नहीं, यह इरादा के अनुसार काम करता है। Number.isInteger(12.0)लौटता है true
le_m

ऐसा लगता है कि यह सही उत्तर होना चाहिए, लेकिन दुर्भाग्य से, यह वैज्ञानिक संकेतन के लिए काम नहीं करता है, उदाहरण के Number.isInteger('1e3')लिए false, हालांकि Number.isInteger(1e3)यह सच है। प्रश्न के इरादे को मानते हुए गैर-पूर्णांक मानों (बजाय प्रतिनिधित्व में एक दशमलव बिंदु की वास्तविक उपस्थिति) को खोजना है, तो स्ट्रिंग मान '12 .0 ' पास होना चाहिए क्योंकि यह एक पूर्णांक का प्रतिनिधित्व करता है, लेकिन फिर से Number.isInteger('12.0')है false
ब्रायनमर्न्स

@brianmearns ओपी का सवाल है कि क्या numberयह पूरा है या नहीं। यदि आपका इनपुट एक स्ट्रिंग है, तो आपको इसे numberपहले उदाहरण के माध्यम से parseFloat(), निश्चित रूप से परिवर्तित करने की आवश्यकता है ।
le_m

47

या आप इसका उपयोग यह जानने के लिए कर सकते हैं कि क्या यह दशमलव नहीं है:

string.indexOf(".") == -1;

2
मुझे लगता है कि यह एक वास्तविक समाधान है क्योंकि यह XX.0 के लिए भी काम कर रहा है
दीपंकर सरकार

5
आगे बढ़ने से पहले स्ट्रिंग में कनवर्ट करें .. यानी: yournumber.toString.indexOf(".")
डैनियल ओमेने

1
francisco_ssb .. बिंदु प्रतीक सार्वभौमिक है ... गणित भाषा में दशमलव स्थान का प्रतिनिधित्व करता है .. यह सार्वभौमिक है और इसे किसी भी देश में काम करना चाहिए। यदि आप अल्पविराम (",") के बारे में बात कर रहे हैं, तो आपको
इंडेक्सऑफ

1
मुझे लगता है कि जब उसका मतलब था कि यह कुछ देशों में काम नहीं करता है, तो वह मुद्रा का उल्लेख कर रहा है, क्योंकि यूरो एक दशमलव बिंदु के बजाय अल्पविराम का उपयोग करता है। हालाँकि, यह प्रश्न मुद्रा के लिए विशिष्ट नहीं है, बस दशमलव ... जैसा कि एक संख्या के एक अंश में है।
टेसा

1
यह काम नहीं करता है अगर दशमलव 1.00 है और आप चाहते हैं कि यह एक int हो जब तक आप ज़बरदस्त मूल्य नहीं लेते हैं
simon-pr

21

सबसे आम समाधान संख्या के पूर्णांक भाग को छीनना है और इसकी तुलना शून्य की तरह करना है:

function Test()
{
     var startVal = 123.456
     alert( (startVal - Math.floor(startVal)) != 0 )
}

31
सिर्फ क्यों नहीं startVal != Math.floor(startVal)?
एंडी ई

2
अच्छा लगा। वही अवधारणा, लेकिन आपका संस्करण और भी साफ है।
थॉमस

1
@ एंडी ई: यह केवल सकारात्मक संख्याओं के लिए संभव है। यह नकारात्मक संख्याओं के लिए काम नहीं करेगा ..
सीया के

3
@SeeyaK: निश्चित रूप से यह नकारात्मक संख्याओं के लिए काम करेगा। कृपया इसे आज़माने के लिए स्वतंत्र महसूस करें।
एंडी ई

1
@DeepakGoyal - यह डिज़ाइन द्वारा है। Math.Floorसमारोह दशमलव मान लेता है और सबसे बड़ा दशमलव मान जावास्क्रिप्ट में अनुमति दी है 2^53 - 1या 9007199254740991। चूंकि 893144042145698745.3यह अधिकतम से बड़ा है, इसलिए फ़ंक्शन विफल हो जाएगा।
थॉमस

20

सामान्य लेकिन प्रभावी!

Math.floor(number) === number;

4
@OmShankar कुशल! = प्रभावी
Fiddles

Math.floor(3.0) == 3.0यह सच है, Math.floor(3.3) == 3.3झूठा है
रोहण

@ फ़िडल्स, ओह ठीक है, यही मैं कहना चाहता था: कुशल नहीं है क्योंकि यह% mod पद्धति की तुलना में प्रदर्शन में बहुत धीमा है। सही करने के लिए धन्यवाद
ओम शंकर

19

// बाइट-आईएनजी के बारे में कैसे?

Number.prototype.isInt= function(){
 return this== this>> 0;
}

मैं जावास्क्रिप्ट में बिट ऑपरेटरों के लिए हमेशा खराब महसूस करता हूं-

वे शायद ही कोई व्यायाम करते हैं।


14
यह 2 ^ 31 - 1 से बड़े पूर्णांकों के लिए विफल रहता है, क्योंकि >>मान को हस्ताक्षरित 32-बिट पूर्णांक में परिवर्तित करता है ।
मैथ्यू क्रुमले

1
@kennebec कमाल - यह अब तक का सबसे मनोरंजक समाधान है। और यह एक RegEx से बहुत बेहतर की एक बिल्ली है।
डेनियल बी। चैपमैन

5
number = 20.5

if (number == Math.floor(number)) {

alert("Integer")

} else {

alert("Decimal")

}

बहुत अच्छा है और XX.0 जैसी चीजों के लिए भी काम करता है! यह काम करता है क्योंकि Math.floor () किसी भी दशमलव को काटता है यदि इसमें एक है तो यदि फर्श मूल संख्या से भिन्न है जिसे हम जानते हैं कि यह एक दशमलव है! और कोई स्ट्रिंग रूपांतरण नहीं :)


4
var re=/^-?[0-9]+$/;
var num=10;
re.test(num);

4
के लिए विफल रहता है num= 999999999999999999999
बॉबिन

1
पहले स्ट्रिंग में परिवर्तित करें और फिर पुनः करें।
ghostdog74

स्ट्रिंग में कनवर्ट किए बिना मेरे लिए काम किया।
अबे पेट्रिलो

4

Number.isInteger()शायद सबसे संक्षिप्त है। यदि यह पूर्णांक है और यह गलत है तो यह सही है।


1
यह स्वीकृत उत्तर होना चाहिए, क्योंकि स्ट्रिंग के मुद्दों के कारण मापांक का उपयोग करना बेहतर है।
इनी

3
function isDecimal(n){
    if(n == "")
        return false;

    var strCheck = "0123456789";
    var i;

    for(i in n){
        if(strCheck.indexOf(n[i]) == -1)
            return false;
    }
    return true;
}

स्पष्टीकरण की आवश्यकता नहीं है। यह बहुत आसान है।
ग्रांट बिर्चमियर

1
अगर स्ट्रिंग में स्ट्रैचचेक में कोई भी मान शामिल है, तो यह एक दशमलव है ... (वह याद कर रहा है और, हालांकि, ...
NicoJuicy

2
parseInt(num) === num

जब कोई संख्या पास हुई, parseInt()तो संख्या को int के रूप में लौटाता है:

parseInt(3.3) === 3.3 // false because 3 !== 3.3
parseInt(3) === 3     // true

4
मुझे यह बहुत पसंद है, लेकिन किसी की विशिष्ट जरूरतों पर निर्भर करता है। दुर्भाग्य से, मुझे परीक्षण को विफल करने के लिए एक फ़ंक्शन की आवश्यकता हैparseInt(3.0) === 3.0 // true
zipzit

2

दशमलव संख्या से विभाजित करके संख्या स्ट्रिंग को सरणी में बदलें। फिर, यदि सरणी का केवल एक मान है, तो इसका मतलब है कि स्ट्रिंग में कोई दशमलव नहीं है।

if(!number.split(".")[1]){
    //do stuff
}

इस तरह से आप यह भी जान सकते हैं कि पूर्णांक और दशमलव वास्तव में क्या हैं। एक और अधिक उन्नत उदाहरण होगा।

number_to_array = string.split(".");
inte = number_to_array[0];
dece = number_to_array[1]; 

if(!dece){
    //do stuff
}

1

यहाँ मेरी गार्ड लाइब्रेरी का एक अंश है (डेविड हरमन द्वारा प्रभावी जावास्क्रिप्ट से प्रेरित):

var guard = {

    guard: function(x) {
        if (!this.test(x)) {
            throw new TypeError("expected " + this);
        }
    }

    // ...
};

// ...

var number = Object.create(guard);
number.test = function(x) {
    return typeof x === "number" || x instanceof Number;
};
number.toString = function() {
    return "number";
};


var uint32 = Object.create(guard);
uint32.test = function(x) {
    return typeof x === "number" && x === (x >>> 0);
};
uint32.toString = function() {
    return "uint32";
};


var decimal = Object.create(guard);
decimal.test = function(x) {
    return number.test(x) && !uint32.test(x);
};
decimal.toString = function() {
    return "decimal";
};


uint32.guard(1234);     // fine
uint32.guard(123.4);    // TypeError: expected uint32

decimal.guard(1234);    // TypeError: expected decimal
decimal.guard(123.4);   // fine

1

आप इसे 10 से गुणा कर सकते हैं और फिर 10 के साथ एक " मोडुलो " ऑपरेशन / डिविज़न कर सकते हैं , और जांच सकते हैं कि क्या दो ऑपरेशन का परिणाम शून्य है। उस दो संचालन के परिणाम दशमलव बिंदु के बाद आपको पहला अंक देंगे । यदि परिणाम शून्य के बराबर है तो संख्या पूरी संख्या है।

if ( (int)(number * 10.0) % 10 == 0 ){
// your code
}


1

आप दशमलव भाग को छोड़ने के लिए मूल्य ( ^ 0या ~~) को परिवर्तित नहीं करने वाले बिटकॉइन संचालन का उपयोग कर सकते हैं , जिसका उपयोग गोलाई के लिए किया जा सकता है। संख्या को गोल करने के बाद, इसकी तुलना मूल मूल्य से की जाती है:

function isDecimal(num) {
  return (num ^ 0) !== num;
}

console.log( isDecimal(1) ); // false
console.log( isDecimal(1.5) ); // true
console.log( isDecimal(-0.5) ); // true


1

यदि कोई संख्या दशमलव स्थान है, तो आप निम्न फ़ंक्शन का उपयोग कर सकते हैं:

function hasDecimal(num){
    return !!(num % 1);
}

console.log(hasDecimal(2)); //false
console.log(hasDecimal(2.32423)); //true

तो जाहिर है कुछ उपयोगकर्ता स्पष्टीकरण चाहते हैं। मैं इसे टुकड़ों में तोड़ दूंगा: (संख्या 1%)

कोष्ठक का मतलब है कि पहले उन ऑपरेशनों को करना। संख्या - फ़ंक्शन द्वारा पारित एक चर। % - एक मापांक प्रतीक जो दाईं ओर से बाईं संख्या को विभाजित करने का प्रयास करता है। यदि शेष है तो इसे दशमलव के रूप में लौटाता है। यदि यह समान रूप से विभाजित होता है तो यह 0 देता है।

इसलिए, हमारे पास अब तक जो राशि है, उसे जमा करें। (संख्या 1) वापस आ जाएगी:

0 जब समान रूप से विभाजित किया जाता है या #। ##### यदि नहीं

० == असत्य।

[Any_NUMBER_NOT_ZERO] == सच।

उदाहरण: नया बुलियन (0) गलत है नया बुलियन (12312.1231) सच है

अन्य विकल्प: एक उपयोगकर्ता (संख्या 1%) के मूल्य को वापस करने की कोशिश कर सकता है, जो मूल रूप से एक ही चीज को प्राप्त करेगा। चूंकि रिटर्न (0) गलत है और रिटर्न (1.213113) सही है।

लेकिन मैं एक बुलियन मूल्य वापस करना चाहता था। इसलिए एक बूलियन में एक मूल्य को लागू करने के लिए एक शॉर्टकट के रूप में मैंने एक जोड़ा! इसके पहले प्रतीक।

के रूप में कई पता हो सकता है। मतलब नहीं। लेकिन यह एक बूलियन में एक मूल्य को भी मजबूर करता है।

चूँकि! सिम्बोल एक बूलियन में मूल्य को बल देता है और यह इसके मूल्य को उलट देता है। मैं उपयोग करता हूं !! एक बूलियन में मूल्य को मजबूर करने के लिए और इसके मूल बूलियन मान पर वापस इसके मूल्य को उल्टा करें।

यहां छवि विवरण दर्ज करें


हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन यह समस्या का हल कैसे और / या इसके बारे में अतिरिक्त संदर्भ प्रदान करता है, इससे उत्तर के दीर्घकालिक मूल्य में सुधार होगा।
बजे निक 3500

0

चेक नंबर के लिए फ़ंक्शन दशमलव या पूरी संख्या है

function IsDecimalExist(p_decimalNumber) {
    var l_boolIsExist = true;

    if (p_decimalNumber % 1 == 0)
        l_boolIsExist = false;

    return l_boolIsExist;
}

0

शायद यह आपके लिए काम करता है?

यह जांचने के लिए रीजेक्स का उपयोग करता है कि क्या संख्या में अल्पविराम है, और यदि नहीं है, तो यह अल्पविराम और पट्टी जोड़ देगा।

var myNumber = '50';
function addCommaStripe(text){
    if(/,/.test(text) == false){
        return text += ',-';
    } else {
        return text;
    }
}
myNumber = addCommaStripe(myNumber);

StackOverflow में आपका स्वागत है। क्या आप बता सकते हैं कि यह कोड क्या करता है और आपको क्यों लगता है कि यह समस्या को हल करेगा।
क्विनज

@ स्पिनज यह जांचने के लिए रीजेक्स का उपयोग करता है कि क्या संख्या में अल्पविराम है, और यदि नहीं है तो यह अल्पविराम और पट्टी जोड़ देगा। तो यह वही करता है जो प्रश्न गोल मूल्य टैग के लिए स्वरूपण को जोड़ने की अतिरिक्त कार्यक्षमता के साथ पूछ रहा है।
user11608734

0

यदि मान स्ट्रिंग है (जैसे <input) से निम्नलिखित का उपयोग करें :

Math.floor(value).toString() !== value

मैं .toString()उन मामलों के लिए भी काम करने के लिए फर्श पर जोड़ता हूं जब value == "1."(दशमलव विभाजक या किसी अन्य स्ट्रिंग के साथ समाप्त होता है)। इसके अलावा Math.floorहमेशा कुछ मान देता है तो .toString()विफल रहता है कभी नहीं।

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