কোনও সংখ্যার দশমিক স্থান আছে কিনা / তা পুরো সংখ্যা কিনা তা পরীক্ষা করে দেখুন


284

আমি জাভাস্ক্রিপ্টে একটি সহজ পদ্ধতির সন্ধান করছি যে কোনও সংখ্যার মধ্যে দশমিক স্থান রয়েছে কিনা তা পরীক্ষা করার জন্য (এটি পূর্ণসংখ্যা কিনা তা নির্ধারণ করার জন্য)। এই ক্ষেত্রে,

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

উত্তর:


819

মডুলাস ব্যবহার করে কাজ করবে:

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
@ স্বনিধি: আপনার মানে কী? কী বৈধ হবে না? "10."একটি সম্পূর্ণ সংখ্যা এবং ফলাফল হ'ল "10"বা হিসাবে একই হবে 10
অ্যান্ডি ই

3
ওপি পরীক্ষণ একটি সম্পর্কে জিজ্ঞেস করে NUMBER টি একটি পূর্ণ সংখ্যা হয়। তিনি কোথাও স্ট্রিংয়ের উল্লেখ করেন নি - এ ক্ষেত্রে অ্যান্ডির উত্তরটি সঠিক।
ওম শঙ্কর

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

সংখ্যা.আইসইন্টেইজার () ES6 স্ট্যান্ডার্ডের একটি অংশ এবং আইই 11 এ সমর্থিত নয়।

এটা তোলে জন্য মিথ্যা ফেরৎ NaN, Infinityএবং অ সাংখ্যিক আর্গুমেন্ট যখন x % 1 != 0আয় সত্য।


2
সমাধানটি 12.0 এর জন্য ব্যর্থ হয়
বিকাশ অরোরা

@ ভিকাসআরোরা না, এটি ইচ্ছাকৃতভাবে কাজ করে। Number.isInteger(12.0)আয় true
le_m

এটি সঠিক উত্তর হওয়া উচিত বলে মনে হয়, তবে দুর্ভাগ্যক্রমে, এটি বৈজ্ঞানিক স্বরলিপি হিসাবে কাজ করে না, যেমন Number.isInteger('1e3')সত্য false, যদিও Number.isInteger(1e3)এটি সত্য। প্রশ্নই অভিপ্রায় ধরে নেওয়া যাক (বরং উপস্থাপনা একটি দশমিক বিন্দু প্রকৃত উপস্থিতি বেশি) অ পূর্ণসংখ্যা মান খুঁজে, তারপর স্ট্রিং মান '12 ২.0 'হল উচিত যেমন একটি পূর্ণসংখ্যা প্রতিনিধিত্ব করে, কিন্তু আবার পাস, Number.isInteger('12.0')হয় false
ব্রায়ানম্যানার 15

@ ব্রায়ানমার্নস ওপির প্রশ্নটি numberপুরো কিনা ঠিক । আপনার ইনপুটটি যদি একটি স্ট্রিং হয় তবে অবশ্যই আপনাকে অবশ্যই এটি numberপ্রথম মাধ্যমে রূপান্তর করতে হবে parseFloat()অবশ্যই অবশ্যই via
le_m

47

বা আপনি এটি ব্যবহার করতে পারেন এটি দশমিক নয় কিনা তা জানতে:

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

2
আমি মনে করি এটি XX এর জন্য এটি কাজ করার জন্য এটিই আসল সমাধান
দীপঙ্কর সরকার

5
এগিয়ে যাওয়ার আগে স্ট্রিংয়ে রূপান্তর করুন .. অর্থাত: yournumber.toString.indexOf(".")
ড্যানিয়েল ওমাইন

1
francisco_ssb .. পয়েন্ট প্রতীক সর্বজনীন ... গণিত ভাষায় দশমিক স্থান উপস্থাপন করে .. এটি সর্বজনীন এবং যে কোনও দেশে কাজ করা উচিত। আপনি যদি কমা নিয়ে কথা বলছেন (","), আপনাকে অবশ্যই সূচক ("।") এর পূর্বে বিন্দুতে ("।") রূপান্তর করতে হবে, অবশ্যই ..
ড্যানিয়েল ওমিন

1
আমি মনে করি যখন তার অর্থ কিছু দেশে এটি কাজ করে না, তখন তিনি মুদ্রার কথা উল্লেখ করছেন, কারণ ইউরো দশমিক পয়েন্টের পরিবর্তে কমা ব্যবহার করে। তবে, প্রশ্নটি মুদ্রার সাথে সুনির্দিষ্ট নয়, কেবল দশমিক ... একটি সংখ্যার ভগ্নাংশের মতো।
টেসা

1
দশমিক ১.০০ হলে এটি কাজ করে না এবং আপনি মান চাপাতে না পারলে আপনি এটি কোনও পূর্ববর্তী হতে চান
সাইমন-জন

21

সর্বাধিক সাধারণ সমাধান হ'ল সংখ্যার পূর্ণসংখ্যার অংশটি কেটে ফেলা এবং এটির মতো শূন্যের সাথে তুলনা করা:

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

31
শুধু কেন নয় startVal != Math.floor(startVal)?
অ্যান্ডি ই

2
খুশী হলাম। একই ধারণা, তবে আপনার সংস্করণটি আরও পরিষ্কার।
থমাস

1
@ অ্যান্ডি ই: এটি কেবল ধনাত্মক সংখ্যার জন্যই সম্ভব। এটি নেতিবাচক সংখ্যার জন্য কাজ করবে না ..
সায়া কে

3
@ সাইয়াক: অবশ্যই এটি নেতিবাচক সংখ্যার জন্য কাজ করবে। এটি চেষ্টা করুন নির্দ্বিধায়।
অ্যান্ডি ই

1
@ প্রদীপগোয়াল - এটি ডিজাইন দ্বারা। Math.Floorফাংশন একটি দশমিক মান নেয় এবং বৃহত্তম দশমিক মান জাভাস্ক্রিপ্ট অনুমতিপ্রাপ্ত হয় 2^53 - 1বা 9007199254740991। যেহেতু 893144042145698745.3এই সর্বাধিকের চেয়ে বড়, কাজটি ব্যর্থ হবে।
থমাস

20

সহজ, কিন্তু কার্যকর!

Math.floor(number) === number;

4
@ ওমশঙ্কর দক্ষ! = কার্যকর
ফিডলস

Math.floor(3.0) == 3.0সত্য, Math.floor(3.3) == 3.3মিথ্যা
রোহ্মার

@ ফিডলস, ওহ ঠিক আছে, আমি যা বলতে চেয়েছিলাম তা কার্যকর নয় : % মোড পদ্ধতির তুলনায় এটি কার্যক্ষমতায় অনেক ধীর। সংশোধন করার জন্য ধন্যবাদ
ওম শঙ্কর

19

// কীভাবে এটি বাইট-ইনিং?

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

আমি সবসময় জাভাস্ক্রিপ্ট-এ বিট অপারেটরদের জন্য খারাপ লাগি-

তারা খুব কমই কোন অনুশীলন পেতে।


14
এটি 2 ^ 31 - 1 এর চেয়ে বড় সংখ্যার জন্য ব্যর্থ হয় কারণ >>মানটি একটি স্বাক্ষরিত 32-বিট পূর্ণসংখ্যায় রূপান্তর করে
ম্যাথু ক্রামলে

1
@ একনিবেক দুর্দান্ত - এটি এখন পর্যন্ত সবচেয়ে মজাদার সমাধান। এবং এটি একটি রেজেক্সের চেয়ে অনেক ভাল।
ড্যানিয়েল বি চ্যাপম্যান

5
number = 20.5

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

alert("Integer")

} else {

alert("Decimal")

}

খুব দুর্দান্ত এবং XX.0 এর মতো জিনিসগুলির জন্যও কাজ করে! এটি কাজ করে কারণ ম্যাথ.ফ্লুর () কোনও দশমিক ছাড়লে তা যদি থাকে তবে যদি ফ্লোরটি মূল সংখ্যা থেকে আলাদা হয় আমরা জানি এটি একটি দশমিক! এবং কোনও স্ট্রিং রূপান্তর নেই :)


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
স্ট্রিং strCheck মান কোন ধারণ করে, তাহলে এটি একটি দশমিক আছে ... (তিনি করতে পারছেন করা হয় এবং, যদিও ...।
NicoJuicy

2
parseInt(num) === num

একটি সংখ্যা পাস করার পরে, parseInt()কেবল সংখ্যা হিসাবে পূর্ণ হিসাবে:

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

4
আমি এটিকে অনেক পছন্দ করি তবে এটির নির্দিষ্ট প্রয়োজনের উপর নির্ভর করে। দুর্ভাগ্যক্রমে, পরীক্ষাটি ব্যর্থ করার জন্য আমার একটি ফাংশন দরকারparseInt(3.0) === 3.0 // true
23-28 এ 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)

প্যারেনথেসিস মানে এই অপারেশনগুলি প্রথমে সম্পাদন করা। num - একটি ভেরিয়েবল ফাংশন দ্বারা পাস। % - একটি মডুলাস প্রতীক যা বাম সংখ্যাটি ডান দ্বারা ভাগ করার চেষ্টা করে। যদি কোনও অবশিষ্ট থাকে তবে এটি দশমিক হিসাবে ফেরত দেয়। যদি এটি সমানভাবে বিভক্ত হয় তবে এটি 0 প্রদান করে।

সুতরাং, আমাদের এখন পর্যন্ত যা আছে তা যোগ করুন,, (সংখ্যা% 1) ফিরে আসবে:

0 যখন সমানভাবে বিভক্ত হয় OR #। ##### না হলে

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);

স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম। এই কোডটি কী করে এবং আপনি কী ভাবেন যে এটি সমস্যার সমাধান করবে তা আপনি কী ব্যাখ্যা করতে পারেন Could
কুইনজ

@ কুইনজ এটি সংখ্যায় কমা রয়েছে কিনা তা যাচাই করার জন্য রেজেক্স ব্যবহার করে এবং যদি না থাকে তবে এটি কমা এবং স্ট্রাইপ যুক্ত করবে। সুতরাং এটি গোলাকার দামের ট্যাগগুলির জন্য বিন্যাস যোগ করার যুক্ত কার্যকারিতা সহ প্রশ্নটি যা জিজ্ঞাসা করছে তা করে।
ব্যবহারকারী 11608734

0

মানটি স্ট্রিং (উদাহরণস্বরূপ <input) হলে নিম্নলিখিতটি ব্যবহার করুন :

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

আমি .toString()যখন ক্ষেত্রে value == "1."(দশমিক বিভাজক বা অন্য স্ট্রিংয়ের সাথে শেষ হয়) এর ক্ষেত্রেও এটি কাজ করতে তলাতে যুক্ত করি । এছাড়াও Math.floorসর্বদা কিছু মান ফেরত দেয় তাই .toString()কখনও ব্যর্থ হয় না।

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