কোনও ভেরিয়েবল জাভাস্ক্রিপ্টে পূর্ণসংখ্যা কিনা তা পরীক্ষা করবেন কীভাবে?


405

কোনও ভেরিয়েবল জাভাস্ক্রিপ্টে পূর্ণসংখ্যা কিনা তা আমি কীভাবে পরীক্ষা করব এবং তা না হলে সতর্কতা নিক্ষেপ করব? আমি এটি চেষ্টা করেছিলাম, কিন্তু এটি কার্যকর হয় না:

<html>
    <head>
        <script type="text/javascript">
            var data = 22;
            alert(NaN(data));
        </script>
    </head>
</html>

2
এখানে একটি posiblity ব্যবহার করা হয় parseInt
পল

2
jsben.ch/#/htLVw - এটি করার সাধারণ উপায়গুলির জন্য একটি মানদণ্ড
এসেসেপনেটস্কেপ

এখানে সমস্ত উত্তর সত্যই পুরানো। আজ, আমি Number.isIntegerদৃic়ভাবে রাখার প্রস্তাব দিচ্ছি যা সর্বনিম্ন হ্যাকি উপায়।
বেনজামিন গ্রুয়েনবাউম

@ বেনজামিম যদি সংখ্যাটি এমন একটি স্ট্রিং হয় যা পূর্ণসংখ্যায় রূপান্তরিত হয়? এবং এইচটিএমএলে সমস্ত কিছু স্ট্রিং থাকে .. সুতরাং সংখ্যা.ইসটাইজার ("69") মিথ্যা
joedotnot

উত্তর:


344

=== অপারেটর ( কঠোর সমতা) ব্যবহার করুননীচের মতো ) ,

if (data === parseInt(data, 10))
    alert("data is integer")
else
    alert("data is not an integer")

95
এটি NaN কে পূর্ণসংখ্যা হিসাবে গণনা করে। আমার পদ্ধতির বিরুদ্ধে আরও খারাপ কাজ করে। jsperf.com/numbers-and-integers
ব্লেক

2
যদি আপনি উপরের কোডটির মাধ্যমে উদাহরণটি চালান এটি একটি পূর্ণসংখ্যার হিসাবে সতর্ক করে এবং অপরটি একটি পূর্ণসংখ্যার মতো হয় না যা ক্ষেত্রে হয় ... এনএএন ক্ষেত্রেও এনএএন এর ধরণ পেরেইন্টের ফেরতের মূল্যের চেয়ে আলাদা হয় () .....
প্রণব

1
আপনি কিছুটা ব্যাখ্যা করতে পারেন? "উদাহরণ" কেবলমাত্র প্রদর্শিত হচ্ছে যে পার্সইন্ট ব্যবহার করে টাইপফ কীওয়ার্ড এবং মডিউলাস অপারেটর ব্যবহারের চেয়ে খারাপ পারফরম্যান্স পাওয়া যায়। তবে আপনি এখন যা বলতে চাইছেন তা আমি দেখতে পাচ্ছি (NaN! = NaN)
ব্লেক রেগালিয়া

4
@ জাভাস্ক্রিপ্টে কনবার্বোডে সমস্ত সংখ্যার একই ধরণের (কোনও ফ্লোট বা ডাবল নেই) তাই 2.0 === 2অপ্রয়োজনীয় দশমিক একই সংখ্যার পৃথক উপস্থাপনা, সুতরাং parseInt(2.0) === 2.0এটি সমান parseInt(2) === 2যা সঠিক
মাইকেল থেরিয়ট

1
@BlakeRegalia: যদিও ফাস্ট হচ্ছে তার পদ্ধতি নেই এই উত্তর থেকে সব সম্ভাব্য মান পাস: stackoverflow.com/a/14794066/843732
c00000fd

506

এটি নির্ভর করে, আপনিও সম্ভাব্য পূর্ণসংখ্যার মতো স্ট্রিংও কাস্ট করতে চান?

এটি করবে:

function isInt(value) {
  return !isNaN(value) && 
         parseInt(Number(value)) == value && 
         !isNaN(parseInt(value, 10));
}

বিটওয়াইজ অপারেশন সহ

সাধারণ পার্স এবং চেক

function isInt(value) {
  var x = parseFloat(value);
  return !isNaN(value) && (x | 0) === x;
}

শর্ট সার্কিট এবং পার্স অপারেশন সংরক্ষণ করে:

function isInt(value) {
  if (isNaN(value)) {
    return false;
  }
  var x = parseFloat(value);
  return (x | 0) === x;
}

অথবা সম্ভবত উভয়ই এক শট:

function isInt(value) {
  return !isNaN(value) && (function(x) { return (x | 0) === x; })(parseFloat(value))
}

পরীক্ষা:

isInt(42)        // true
isInt("42")      // true
isInt(4e2)       // true
isInt("4e2")     // true
isInt(" 1 ")     // true
isInt("")        // false
isInt("  ")      // false
isInt(42.1)      // false
isInt("1a")      // false
isInt("4e2a")    // false
isInt(null)      // false
isInt(undefined) // false
isInt(NaN)       // false

এই হিটটি এখানে: http://jsfiddle.net/opfyrqwp/28/

কর্মক্ষমতা

পরীক্ষাটি প্রকাশ করে যে সংক্ষিপ্ত-সার্কিট সমাধানটি সেরা পারফরম্যান্স (অপ্স / সেকেন্ড) রয়েছে।

// Short-circuiting, and saving a parse operation
function isInt(value) {
  var x;
  if (isNaN(value)) {
    return false;
  }
  x = parseFloat(value);
  return (x | 0) === x;
}

এখানে একটি মানদণ্ড দেওয়া হয়েছে: http://jsben.ch/#/htLVw

আপনি যদি একটি সংক্ষিপ্ত, শর্ট সার্কিটের বিমূ form় ফর্ম কল্পনা:

function isInt(value) {
  var x;
  return isNaN(value) ? !1 : (x = parseFloat(value), (0 | x) === x);
}

অবশ্যই, আমি মিনিফায়ারটিকে এটির যত্ন নেওয়ার পরামর্শ দেব।


4
@ ক্রিস্ক - একাধিক সমাধানের জন্য উত্সাহিত আপনার সরবরাহিত 4 টি ভেরিয়েন্টগুলির জন্যও একটি দ্রুত পরীক্ষা করেছেন: jsperf.com/tfm-is-integer - এবং নির্ধারণ করেছেন যে সংক্ষিপ্ত-সার্কিট সমাধানটি সেরা কর্মক্ষমতা রয়েছে has
টিএমএমটিগ

1
এটি 209999999999999999 এ মিথ্যা প্রত্যাবর্তন করছে: - (
জকুচারাভিচ

1
@ জকুচারাভিক বিটওয়াইজ বা অপারেটর হলেন অপরাধী। নন-বিটওয়াইজ সংস্করণ ব্যবহার করে সত্যটি ফিরে আসবে।
ক্রিশ্চ

1
এটি '২' করে তোলে সত্যের কাছে মূল্যায়ন করুন
সাইবারওম্ব্যাট

1
@cyberwombat ভাল যে দশমিক সংখ্যা 2.0 :-)
কুবা বেরেনেক

120

ধরে নেওয়া যায় যে আপনি প্রশ্নের মধ্যে পরিবর্তনশীল সম্পর্কে কিছুই জানেন না, আপনার এই পন্থাটি নেওয়া উচিত:

if(typeof data === 'number') {
    var remainder = (data % 1);
    if(remainder === 0) {
        // yes, it is an integer
    }
    else if(isNaN(remainder)) {
        // no, data is either: NaN, Infinity, or -Infinity
    }
    else {
        // no, it is a float (still a number though)
    }
}
else {
    // no way, it is not even a number
}

এটি সহজভাবে বলতে:

if(typeof data==='number' && (data%1)===0) {
    // data is an integer
}

8
আপনি কি বোঝাতে চেয়েছেন? জাভাস্ক্রিপ্টে ডেটা ধরণের জন্য এটি পরীক্ষা করে, "1.0"এটি একটি স্ট্রিং, এবং তাই কোনও সংখ্যা নয়। অন্যথায় 1কোনও ভেরিয়েবলের মান var my_var=1.0;হ'ল যদি আপনি এটি সেট করে সেট করেন যা সঠিকভাবে এই ফাংশনটির দ্বারা একটি পূর্ণসংখ্যা হিসাবে চিহ্নিত করা হয়।
ব্লেক রেগালিয়া

4
শীঘ্রই, Number.isInteger()কাজ করবে ... ততক্ষণ পর্যন্ত এটি করা ভাল উপায়
ক্লদিউ

নাম্বার আইস ইন্টেজার আমার পক্ষে কাজ করে না। আমি অবশ্যই কিছু ভুল করছি। ব্লেকের সমাধান% 1 পুরোপুরি কার্যকর করে।
ম্যাকমেকারসন

104

Number.isInteger() যাবার উপায় বলে মনে হচ্ছে

এমডিএন ব্রাউজারগুলিকে সমর্থন করে না Number.isInteger(), প্রধানত সমস্ত আইই এর সংস্করণগুলির জন্য নিম্নলিখিত পলফিল সরবরাহ করেছে ।

এমডিএন পৃষ্ঠায় লিঙ্ক করুন

Number.isInteger = Number.isInteger || function(value) {
    return typeof value === "number" && 
           isFinite(value) && 
           Math.floor(value) === value;
};

2
এমডিএন 9007199254740992 এ পরীক্ষাটি সরিয়ে নিয়েছে
বার্নহার্ড ডাবলার

2
এটি সবচেয়ে সোজা এবং "সঠিক" উত্তর। আমি বলতে চাইছি জাভা স্ক্রিপ্টটিতে ইতিমধ্যে পূর্ণসংখ্যা পরীক্ষা করার পদ্ধতি রয়েছে। নতুন লেখার দরকার নেই। isNaN () সংখ্যার জন্য পরীক্ষা করে, পূর্ণসংখ্যার জন্য নয়।
গ্লোবওয়াল্ডেস্ক

66

এই সংখ্যাটির কোনও অবশিষ্ট আছে কিনা তা আপনি পরীক্ষা করতে পারেন:

var data = 22;

if(data % 1 === 0){
   // yes it's an integer.
}

মনে মনে, যদি আপনার ইনপুটটিও পাঠ্য হতে পারে এবং আপনি প্রথমে এটি যাচাই করতে চান তবে প্রথমে আপনি এটি টাইপটি পরীক্ষা করতে পারেন:

var data = 22;

if(typeof data === 'number'){
     // yes it is numeric

    if(data % 1 === 0){
       // yes it's an integer.
    }
}

3
@ ইরভিনাস: 0 % 1 === 0কনসোলে চালান । এটি রিটার্ন trueহিসাবে 0 % 1ফিরে আসে 0
না 22

আপনি কি এটি ;
কোডবিট

1
@ ইরভিনাস: আইই 9, আইই 8 এবং আই 7 সামঞ্জস্যতা মোডে 0 % 1ফিরে আসে 0
নাহ

এটি একটি বাস্তব পুরানো IE এ চেষ্টা করে দেখুন। এছাড়াও সর্বদা শূন্যের জন্য যাচাই করা এবং ব্রাউজারের উপর নির্ভর না করার জন্য প্রোগ্রামিংয়ের একটি ভাল উপায়।
কোডবিট

62
@ ইরভিনাস: আমি মনে করি আপনি আপনার তথ্যগুলি মিশ্রিত করেছেন। শূন্য ত্রুটি দ্বারা বিভেদ সৃষ্টি যখন আপনি ভাগ করা হয় দ্বারা শূন্য যখন আপনি একটি সংখ্যা দ্বারা শূন্য ভাগ। আইই এর সংস্করণটি আদৌ কিছুই করার নেই।
নাহ


15

প্রথমে, এনএন একটি "নম্বর" (হ্যাঁ আমি জানি এটি অদ্ভুত, কেবল এটির সাথে রোল করুন), এবং কোনও "ফাংশন" নয়।

ভেরিয়েবলের ধরণটি একটি সংখ্যা কিনা আপনার উভয়কেই পরীক্ষা করতে হবে এবং পূর্ণসংখ্যার জন্য পরীক্ষা করতে আমি মডুলাসটি ব্যবহার করব।

alert(typeof data === 'number' && data%1 == 0);

2
হওয়া উচিত: সতর্কতা (টাইফ অফ ডেটা == 'সংখ্যা' && (ডেটা == 0 || ডেটা% 1 == 0)); শূন্য দ্বারা বিভাগ এড়ানোর জন্য।
কোডবিট

19
@ ইরভিনাস 0% 1 এখনও 1 দ্বারা ভাগ করছে
ফিলি

@ ফিল, (0 == 0 || 0 % 1 == 0)মূল্যায়ন করবে true
টমেকবি

ওহ, উপায় দ্বারা 0 % 1 == 0এছাড়াও মূল্যায়ন true! %বিভাগ নয়!
টমেকিবি

13

ব্যবহার করার সময় সাবধানতা অবলম্বন করুন

সংখ্যা% 1

খালি স্ট্রিং ('') বা বুলিয়ান (সত্য বা মিথ্যা) পূর্ণসংখ্যা হিসাবে ফিরে আসবে। আপনি এটি করতে চাইবেন না

false % 1 // true
'' % 1 //true

Number.isInteger (তথ্য)

Number.isInteger(22); //true
Number.isInteger(22.2); //false
Number.isInteger('22'); //false

ব্রাউজারে ফাংশন বিল্ড। পুরানো ব্রাউজারগুলিকে ডসেন্ট সমর্থন করে

বিকল্প:

Math.round(num)=== num

তবে ম্যাথ.াউন্ড ()ও খালি স্ট্রিং এবং বুলিয়ান জন্য ব্যর্থ হবে


8

পূর্ণাঙ্গের মতো পোস্টার চায় কিনা তা পরীক্ষা করতে:

if (+data===parseInt(data)) {return true} else {return false}

তথ্যের সামনে নোটিশ + (স্ট্রিংটিকে সংখ্যায় রূপান্তর করে) এবং সঠিকভাবে ===।

এখানে উদাহরণ রয়েছে:

data=10
+data===parseInt(data)
true

data="10"
+data===parseInt(data)
true

data="10.2"
+data===parseInt(data)
false

6
এটি আমার ক্ষেত্রে স্মার্ট সমাধান হিসাবে মনে হচ্ছে (যেখানে এটি কোনও স্ট্রিংয়ের মধ্যে একটি পূর্ণসংখ্যা হয় তা যদি আমি কিছু মনে করি না)। তবে: শুধু যাব না কেন return (+data===parseInt(data))?
সুইস মিস্টার

6
if(Number.isInteger(Number(data))){
    //-----
}


আই ক্রিসক্রস নাও এখন আইই ব্যতীত সমস্ত কিছুর দ্বারা সমর্থিত, যদি আপনি লিগ্যাসি অপারেটিং সিস্টেমকে সমর্থন করেন তবে এটি কেবল উদ্বেগের বিষয়।
অলৌকিক চিহ্ন

6

সবচেয়ে সহজ এবং পরিষ্কার প্রাক ECMAScript-6 সমাধান (যা কোনও স্ট্রিং বা নাল এর মতো একটি অ-সংখ্যাসূচক মান যদি ফাংশনে প্রেরণ করা হয় তবেও মিথ্যা ফেরত দেওয়া যথেষ্ট শক্তিশালী) নিম্নলিখিতটি হবে:

function isInteger(x) { return (x^0) === x; } 

নিম্নলিখিত সমাধানটি কাজ করবে, যদিও উপরের মত মার্জিত নয়:

function isInteger(x) { return Math.round(x) === x; }

বিঃদ্রঃ যে উপরের প্রয়োগে ম্যাথ.সিল () বা ম্যাথ.ফ্লুর () সমানভাবে (ম্যাথ.উন্ড (পরিবর্তে)) ব্যবহার করা যেতে পারে।

বা বিকল্পভাবে:

function isInteger(x) { return (typeof x === 'number') && (x % 1 === 0); }

একটি মোটামুটি সাধারণ ভুল সমাধানটি হ'ল:

function isInteger(x) { return parseInt(x, 10) === x; }

যদিও এই পার্সেন্ট-ভিত্তিক পদ্ধতিটি এক্স এর অনেকগুলি মানের জন্য ভাল কাজ করবে, একবার এক্স বেশ বড় হয়ে গেলে এটি সঠিকভাবে কাজ করতে ব্যর্থ হবে। সমস্যাটি হ'ল পার্সেন্ট () অঙ্কগুলি পার্সিংয়ের আগে তার প্রথম প্যারামিটারটিকে একটি স্ট্রিংয়ে coerces। অতএব, একবার সংখ্যাটি যথেষ্ট পরিমাণে বড় হয়ে যাওয়ার পরে এর স্ট্রিং প্রতিনিধিত্বটি তাত্পর্যপূর্ণ আকারে উপস্থাপিত হবে (যেমন, 1e + 21)। তদনুসারে, parseInt () তারপরে 1e + 21 পার্স করার চেষ্টা করবে তবে ই অক্ষরটি পৌঁছালে পার্সিং বন্ধ করবে এবং এর ফলে 1 এর মান ফিরে আসবে: লক্ষ্য করুন:

> String(1000000000000000000000)
'1e+21'

> parseInt(1000000000000000000000, 10)
1

> parseInt(1000000000000000000000, 10) === 1000000000000000000000
false

6

কেন কেউ উল্লেখ করেছেন Number.isInteger()?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger

আমার পক্ষে নিখুঁতভাবে কাজ করে এবং NaNএকটি সংখ্যা শুরুতে সমস্যাটি সমাধান করে ।


1
মনে রাখবেন এটি ES6, সুতরাং পুরানো ব্রাউজারগুলি (যেমন আই <= 11) এটি সমর্থন করে না। উপরের ডক্সটি একটি পলিফিল সরবরাহ করে।
বিশপ

কারো উল্লেখ করেনি Number.isInteger(): 3.5 বছর আগে আপনি stackoverflow.com/a/27424770/5208540
অ্যালেক্স Stragies

যদি আমরা কোনও ইনপুট থেকে কোনও মান ধরতে চলেছি তবে চেক করুন, নম্বর.আইসইঞ্জার সর্বদা মিথ্যা হিসাবে প্রত্যাবর্তন করবে কারণ ইনপুট মানটি স্ট্রিং ডেটাটাইপের হয়
শনিগামে

6

ES6 এ 2 নম্বর নতুন অবজেক্টের জন্য নতুন পদ্ধতি যুক্ত করা হয়।

এটিতে সংখ্যা.আইসইন্টিজার () পদ্ধতিটি আর্গুমেন্টটি পূর্ণসংখ্যা হলে সত্য হয়।

ব্যবহারের উদাহরণ:

Number.isInteger(10);        // returns true
Number.isInteger(10.5);      // returns false

4

ইসিএমএ -262 6.0 ( ইএস 6) স্ট্যান্ডার্ডের মধ্যে নাম্বারআইএসইন্টিজার অন্তর্ভুক্ত ফাংশন ।

পুরানো ব্রাউজারের জন্য সমর্থন যুক্ত করার জন্য আমি দৃ strong় এবং সম্প্রদায় সমর্থিত সমাধানগুলি ব্যবহার করার জন্য সুপারিশ করছি:

https://github.com/paulmillr/es6-shim

যা খাঁটি ES6 জেএস পলফিল লাইব্রেরি

মনে রাখবেন যে এই লিবিতে es5-shim প্রয়োজন, কেবল README.md অনুসরণ করুন।


4

আপনি চেষ্টা করতে Number.isInteger(Number(value))পারেন যদি valueস্ট্রিং ফর্ম যেমন একটি পূর্ণসংখ্যার উদাহরণস্বরূপ var value = "23"এবং আপনি এটি মূল্যায়ন করতে চান true। চেষ্টা করা থেকে বিরত থাকুন Number.isInteger(parseInt(value))কারণ এটি সর্বদা সঠিক মান ফেরত দেয় না। উদাহরণস্বরূপ যদি var value = "23abc"এবং আপনি parseIntবাস্তবায়নটি ব্যবহার করেন তবে এটি সত্য হয়ে যাবে।

তবে আপনি যদি কঠোরভাবে পূর্ণসংখ্যার মানগুলি চান তবে সম্ভবত Number.isInteger(value)কৌশলটি করা উচিত।


1
দ্রষ্টব্য যে এটি আই দ্বারা সমর্থিত নয়; এখানে নথিতে বর্ণিত হিসাবে আমি আমার স্ক্রিপ্টটি থামিয়ে দিয়েছি কারণ বিশেষত আপনি যে
ভেরিটি

4
var x = 1.5;
if(!isNaN(x)){
 console.log('Number');
 if(x % 1 == 0){
   console.log('Integer');
 }
}else {
 console.log('not a number');
}

3
২৯ টি উত্তর পরে, আপনার উত্তরটি দাঁড় করানোর জন্য আরও কিছুটা ব্যাখ্যা আশা করা উচিত ...
brasofilo

3

ভেরিয়েবলটি একই ধরণের পূর্ণসংখ্যের সাথে একই গোলকটির সমান কিনা তা পরীক্ষা করুন:

if(Math.round(data) != data) {
    alert("Variable is not an integer!");
}

আপনি খুব সহজেই ফিরে সঙ্গে এই ফাংশনের সমস্যা নির্ধারণ করতে পারেন trueজন্য NaN, সহজভাবে পরিবর্তন করে !=করতে !==এবং ইনভার্টারিং ifব্লক। এটি কাজ করে কারণ NaNজাভাস্ক্রিপ্টের একমাত্র মান যা নিজের সমান হয় না। উদাহরণস্বরূপ, নতুন কোডটি হওয়া উচিতif (Math.round(x) === x) { /* x IS an integer! */ }
mgthomas99

3

পাশাপাশি Number.isInteger(),। ES6- নির্দিষ্ট ব্যবহার করে এখানেNumber.isSafeInteger() অন্য বিকল্প হতে পারে option

Number.isSafeInteger(..)প্রাক ES6 ব্রাউজারগুলিতে পলিফিল করতে :

Number.isSafeInteger = Number.isSafeInteger || function(num) {
    return typeof num === "number" && 
           isFinite(num) && 
           Math.floor(num) === num &&
           Math.abs( num ) <= Number.MAX_SAFE_INTEGER;
};

3

Number.isInteger() আপনার ব্রাউজারটি যদি সমর্থন করে তবে এটি সবচেয়ে ভাল উপায়, যদি তা না হয় তবে আমার মনে হয় অনেক অনেক উপায় আছে:

function isInt1(value){
  return (value^0) === value
}

বা:

function isInt2(value){
  return (typeof value === 'number') && (value % 1 === 0); 
}

বা:

function isInt3(value){
  return parseInt(value, 10) === value; 
}

বা:

function isInt4(value){
  return Math.round(value) === value; 
}

এখন আমরা ফলাফলগুলি পরীক্ষা করতে পারি:

var value = 1
isInt1(value)   // return true
isInt2(value)   // return true
isInt3(value)   // return true
isInt4(value)   // return true

var value = 1.1
isInt1(value)   // return false
isInt2(value)   // return false
isInt3(value)   // return false
isInt4(value)   // return false

var value = 1000000000000000000
isInt1(value)   // return false
isInt2(value)   // return true
isInt3(value)   // return false
isInt4(value)   // return true

var value = undefined
isInt1(value)   // return false
isInt2(value)   // return false
isInt3(value)   // return false
isInt4(value)   // return false

var value = '1' //number as string
isInt1(value)   // return false
isInt2(value)   // return false
isInt3(value)   // return false
isInt4(value)   // return false

সুতরাং, এই সমস্ত পদ্ধতিতে কাজ করা হয়, তবে সংখ্যাটি খুব বড় হলে, পার্সেন্ট এবং ^ অপারেটরটি ভাল কাজ করে না।


3

শুধু এটি চেষ্টা করুন:

let number = 5;
if (Number.isInteger(number)) {
    //do something
}

নাম্বার আইসইন্টেজার () আইই ব্রাউজারগুলির সমস্ত সংস্করণে সমর্থিত নয়।
এসকেআর

2

আপনি এই ফাংশনটি ব্যবহার করতে পারেন:

function isInteger(value) {
    return (value == parseInt(value));
}

মানটি একটি পূর্ণসংখ্যার মানযুক্ত একটি স্ট্রিং হলেও এটি সত্য হবে।
সুতরাং, ফলাফলগুলি হবে:

alert(isInteger(1)); // true
alert(isInteger(1.2)); // false
alert(isInteger("1")); // true
alert(isInteger("1.2")); // false
alert(isInteger("abc")); // false

2

আমার পদ্ধতি:

a >= 1e+21পরীক্ষা কেবল এমন মানের জন্য পাস করতে পারে যা একটি সংখ্যা এবং হতে হবে খুব বড় একটি হতে হবে। এই আলোচনায় প্রদত্ত অন্যান্য সমাধানের বিপরীতে এটি নিশ্চিতভাবে সমস্ত ক্ষেত্রে আচ্ছাদন করবে।

a === (a|0)যদি প্রদত্ত ফাংশনটির যুক্তি হুবহু (===) বিটওয়াইস-ট্রান্সফর্মড মানের সমান হয় তবে এর অর্থ হল যুক্তিটি একটি পূর্ণসংখ্যা।

a|0যে 0কোনও মান একটি সংখ্যা নয় এর জন্য ফিরে আসবে , এবং যদি সত্যই একটি সংখ্যা হয় তবে এটি দশমিক পয়েন্টের পরে কোনও কিছু সরিয়ে ফেলবে , তাই হয়ে যাবেaa1.00011

function isInteger(a){
    return a >= 1e+21 ? true : a === (a|0)
}

/// tests ///////////////////////////
[
  1,                        // true
  1000000000000000000000,   // true
  4e2,                      // true
  Infinity,                 // true
  1.0,                      // true
  1.0000000000001,          // false
  0.1,                      // false
  "0",                      // false
  "1",                      // false
  "1.1",                    // false
  NaN,                      // false
  [],                       // false
  {},                       // false
  true,                     // false
  false,                    // false
  null,                     // false
  undefined                 // false
].forEach( a => console.log(typeof a, a, isInteger(a)) )


1
ভাল ধারণা! আমি এটিও পছন্দ করি যে আপনি নিজের পরীক্ষাগুলি দেখিয়েছেন তবে দুর্ভাগ্যক্রমে এটি "0" এর স্ট্রিং মান বিবেচনা করে না।
জামার

আরে @vsync, ইচ্ছাকৃতভাবে নয়। আমি মূলত আপভোট করেছি তবে আমার আগের মন্তব্যের কারণে এটিকে ফিরিয়ে নেওয়ার সিদ্ধান্ত নিয়েছি। আমার অবশ্যই দুর্ঘটনাক্রমে এটি বা অন্য কোনও কিছুতে ডাবল ক্লিক করা উচিত।
জামার

1

আপনি এর জন্য রিজেপ্স ব্যবহার করতে পারেন:

function isInteger(n) {
    return (typeof n == 'number' && /^-?\d+$/.test(n+''));
}

1

Http://www.toptal.com / জাভাস্ক্রিপ্ট / ইন্টারভিউ- প্রশ্নগুলি থেকে :

function isInteger(x) { return (x^0) === x; } 

এটি এটি করার সর্বোত্তম উপায় হিসাবে পাওয়া গেছে।


একটি সঠিক বাস্তবায়ন নয়, কেবলমাত্র ছোট সংখ্যার জন্য কাজ করে, সঠিক প্রয়োগের জন্য বিকাশকারী.মোজিলা.আর.ইন- ইউএস / ডকস / ওয়েব / জাভা স্ক্রিপ্ট / উল্লেখ / দেখুন ।
anru

1

|অপারেটরটি ব্যবহার করুন :

(5.3 | 0) === 5.3 // => false
(5.0 | 0) === 5.0 // => true

সুতরাং, একটি পরীক্ষার ফাংশনটি দেখতে এরকম হতে পারে:

var isInteger = function (value) {
  if (typeof value !== 'number') {
    return false;
  }

  if ((value | 0) !== value) {
    return false;
  }

  return true;
};

1

এটি শেষে আরও একটি বিন্দু ( 121. ) সমাধান করবে

function isInt(value) {
        var ind = value.indexOf(".");
        if (ind > -1) { return false; }

        if (isNaN(value)) {
            return false;
        }

        var x = parseFloat(value);
        return (x | 0) === x;

    }

1

বিভাজক ব্যতীত ধনাত্মক পূর্ণসংখ্যার মানগুলির জন্য:

return ( data !== '' && data === data.replace(/\D/, '') );

পরীক্ষাগুলি ১. খালি না হলে এবং ২. মানটি যদি তার মানতে একটি অ-অঙ্কের চরটি প্রতিস্থাপনের ফলাফলের সমান হয়।


1

ওকে বিয়োগ হয়েছে, কারণ আমার উদাহরণটি বর্ণনা করে নি, তাই আরও উদাহরণ :):

আমি নিয়মিত প্রকাশ এবং পরীক্ষার পদ্ধতি ব্যবহার করি:

var isInteger = /^[0-9]\d*$/;

isInteger.test(123); //true
isInteger.test('123'); // true
isInteger.test('sdf'); //false
isInteger.test('123sdf'); //false

// If u want to avoid string value:
typeof testVal !== 'string' && isInteger.test(testValue);

মাইনাস পেয়েছে কারণ সম্ভবত পরীক্ষা কোনও ফাংশন নয়।
imlokesh

@ আইমলোকেশ আপনার অর্থ "ফাংশন নয়"? ওও আমি লিখেছি আমি "পরীক্ষার পদ্ধতি" ব্যবহার করি।
ভ্যাসিল গুটনিক

@ আইমলোকেশ কোনও সমস্যা নেই, আমি কেবল ইউটিকে জিজ্ঞাসা করেছি যে আমি এটি প্রযোজনায় ব্যবহার করেছি :) এবং আমি ভেবেছিলাম আপনি কিছু বাগ খুঁজে পেয়েছেন :)
ভ্যাসিল গুটনিক

1

আপনি এটি এইভাবে চেষ্টা করতে পারেন

var data = 22;
if (Number.isInteger(data)) {
    console.log("integer");
 }else{
     console.log("not an integer");
 }

অথবা

if (data === parseInt(data, 10)){
    console.log("integer");
}else{
    console.log("not an integer");
}

এটি এর জন্য ভুল ফলাফল আনবে data=22.5;। এছাড়াও উভয় শাখায় রয়েছে console.log("not an integer"):: এস
কলিন ব্রেমে

0

আমাকে ভেরিয়েবল (স্ট্রিং বা সংখ্যা) একটি পূর্ণসংখ্যা কিনা তা পরীক্ষা করে দেখতে হয়েছিল এবং আমি এই শর্তটি ব্যবহার করেছি:

function isInt(a){
    return !isNaN(a) && parseInt(a) == parseFloat(a);
}

http://jsfiddle.net/e267369d/1/

অন্যান্য কিছু প্রশ্নের উত্তর দিয়েছেন একটি অনুরূপ সমাধান (উপর নির্ভর আছে parseFloatসঙ্গে মিলিত isNaN), কিন্তু খনি আরো সোজা এগিয়ে হওয়া উচিত এবং স্ব ব্যাখ্যা।


সম্পাদনা: আমি জানতে পেরেছিলাম যে আমার পদ্ধতিটি কমাযুক্ত স্ট্রিংগুলিতে ব্যর্থ হয়েছে ("1,2" এর মতো) এবং আমি বুঝতে পেরেছিলাম যে আমার বিশেষ ক্ষেত্রে আমি স্ট্রিংটি বৈধ পূর্ণসংখ্যার না হলে ফাংশনটি ব্যর্থ করতে চাই (কোনও ফ্লোটে ব্যর্থ হওয়া উচিত) এমনকি 1.0)। সুতরাং এখানে আমার ফাংশন এম কে II:

function isInt(a){
    return !isNaN(a) && parseInt(a) == parseFloat(a) && (typeof a != 'string' || (a.indexOf('.') == -1 && a.indexOf(',') == -1));
}

http://jsfiddle.net/e267369d/3/

অবশ্যই পূর্ণসংখ্যার ভাসমান (1.0 টি স্টাফ) গ্রহণ করার জন্য আপনার যদি ফাংশনটির প্রয়োজন হয় তবে আপনি সর্বদা বিন্দুর শর্তটি সরাতে পারেন a.indexOf('.') == -1

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.