কিভাবে জাভাস্ক্রিপ্ট একটি স্ট্রিং একটি পূর্ণসংখ্যার রূপান্তর করতে?


1695

আমি কীভাবে জাভাস্ক্রিপ্টে একটি স্ট্রিংকে একটি পূর্ণসংখ্যায় রূপান্তর করব?


1
এই পৃষ্ঠার নীচে একটি দুর্দান্ত টেবিল রয়েছে যা রূপান্তরটি করার বিভিন্ন পদ্ধতির সাথে তুলনা করে: मध्यम.com
জন গিলমার

উত্তর:


2149

সহজ উপায় হ'ল নেটিভ Numberফাংশনটি ব্যবহার করা :

var x = Number("1000")

যে আপনার জন্য কাজ করে না, তাহলে আছে parseInt , ইউনারী প্লাস , মেঝে সঙ্গে parseFloat এবং Math.round পদ্ধতি।

parseInt:

var x = parseInt("1000", 10); // you want to use radix 10
    // so you get a decimal number even with a leading 0 and an old browser ([IE8, Firefox 20, Chrome 22 and older][1])

যদি আপনার স্ট্রিং ইতিমধ্যে পূর্ণসংখ্যার আকারে থাকে তবে আনরিয়াস প্লাস:

var x = +"1000";

যদি আপনার স্ট্রিংটি ভাসমান হতে পারে এবং আপনি একটি পূর্ণসংখ্যা চান:

var x = Math.floor("1000.01"); //floor automatically converts string to number

বা, যদি আপনি ম্যাথ.ফ্লুর বেশ কয়েকবার ব্যবহার করতে যাচ্ছেন:

var floor = Math.floor;
var x = floor("1000.01");

আপনি যদি এমন টাইপ হন যিনি প্যার্সিইন্ট কল করার সময় র‌্যাডিক্সটি রাখতে ভুলে যান, আপনি পার্সফ্লোট ব্যবহার করতে পারেন এবং আপনার পছন্দ মতো এটি বৃত্তাকার করতে পারেন। এখানে আমি মেঝে ব্যবহার।

var floor = Math.floor;
var x = floor(parseFloat("1000.01"));

মজার বিষয় হচ্ছে, ম্যাথ.উন্ড (যেমন ম্যাথ.ফ্লুর) সংখ্যার রূপান্তর করতে স্ট্রিং করবে, সুতরাং আপনি যদি নম্বরটি বৃত্তাকার চান (বা স্ট্রিংটিতে আপনার একটি পূর্ণসংখ্যা থাকে) তবে এটি দুর্দান্ত উপায়, সম্ভবত আমার প্রিয়:

var round = Math.round;
var x = round("1000"); //equivalent to round("1000",0)

1
jsperf.com/performance-of-parseint/29 , hy @ jedierikb আমি jsperf লিঙ্কটি সম্পাদনা করেছি। যোগ '4'>>0এবং '4'>>>0
ইমানিয়াকস 17'14

6
2015-এ আপডেট করুন: ইসমাস্ক্রিপ্ট 5 অনুসারে, শীর্ষস্থানীয় শূন্য "0" সহ স্ট্রিংগুলি 8 এর পরিবর্তে 10 টি ডিফল্ট রেডিক্স পেয়ে যায়, স্পষ্টভাবে 10 এর পুরানো ব্রাউজারগুলির জন্য নির্দিষ্ট করে রেডিক্স 10 প্রয়োজনীয়। kangax.github.io/compat-table/es5/…
গ্রিলস

19
নোট করুন যে সংখ্যা ('') সাফল্য (0 ফেরত) করবে, যদিও বেশিরভাগ লোকেরা খালি স্ট্রিংটিকে বৈধ সংখ্যা উপস্থাপনের জন্য বিবেচনা করবেন না। এবং পার্সিয়ান্ট ('3 কিউ') সাফল্য লাভ করে (3 রিটার্ন) যদিও বেশিরভাগ লোকেরা '3 কিউ' কে একটি বৈধ সংখ্যা হিসাবে বিবেচনা করবেন না।
ডেভ পাচেকো

3
মাথা উঁচু করে। উভয় parseIntএবং parseFloatআনন্দের সাথে চিঠি গ্রহণ করে। কেবল ধারাবাহিকভাবে Numberফিরে আসে NaN
কার্ল পোকাস

2
আমার মতে, একটি পূর্ণসংখ্যা পার্স করার ফলে ব্যতিক্রম / NaNপ্রতিটি মানের জন্য ফলাফল হওয়া উচিত যা সঠিকভাবে পূর্ণসংখ্যা নয়। এই কাজের অতএব কেউ Number('2.2')coerces করতে 2এবং Number('')নিগৃহীত 0
মাইকেল Knapik

225

ParseInt ফাংশনটি ব্যবহার করে দেখুন:

var number = parseInt("10");

কিন্তু একটি সমস্যা আছে. আপনি যদি "010" কে পার্সইন্ট ফাংশনটি ব্যবহার করে রূপান্তর করার চেষ্টা করেন, এটি অষ্টাল সংখ্যা হিসাবে সনাক্ত করে এবং ৮ নম্বর ফিরে আসবে, সুতরাং আপনাকে একটি রেডিক্স নির্দিষ্ট করতে হবে (২ থেকে ৩ from পর্যন্ত)। এই ক্ষেত্রে বেস 10।

parseInt(string, radix)

উদাহরণ:

var result = parseInt("010", 10) == 10; // Returns true

var result = parseInt("010") == 10; // Returns false

নোট করুন যে parseIntকোনও বৈধ বিশ্লেষণের পরে খারাপ ডেটা উপেক্ষা করে।
এই নির্দেশিকাটি 51 হিসাবে পার্স করা হবে:

var result = parseInt('51e3daf6-b521-446a-9f5b-a1bb4d8bac36', 10) == 51; // Returns true

4

7
এটি নতুন ব্রাউজারগুলির জন্য নাও হতে পারে তবে পিছনের সামঞ্জস্যের জন্য এখনও রেডিক্স প্রয়োজন।
প্রোগ্রামিংয়ের অধ্যাপক

'', বা '02 "বা" 02 + 1 ", বা" 03,12 "বা" 03.12 "সম্পর্কে কী?
স্ট্যাকডেভ

3
নোট করুন যে এটি সংখ্যার পরেও খারাপ ডেটা উপেক্ষা করে। উদাহরণস্বরূপ, parseInt('0asdf', 10)উত্পাদন করে 0
স্যাম

121

জাভাস্ক্রিপ্টে একটি স্ট্রিংকে একটি সংখ্যায় রূপান্তর করার দুটি প্রধান উপায় রয়েছে। এর একটি উপায় এটি পার্স করা এবং অন্য উপায়টি এর ধরণটিকে একটি সংখ্যায় পরিবর্তন করা। অন্যান্য উত্তরের সমস্ত কৌশল (যেমন আনরি প্লাস) স্ট্রিংয়ের ধরণকে সংখ্যায় স্পষ্টভাবে জড়িত করে। আপনি একই জিনিস সংখ্যা ফাংশন দিয়ে স্পষ্টভাবে করতে পারেন।

পদান্বয়

var parsed = parseInt("97", 10);

সংখ্যায় স্ট্রিং পার্সিংয়ের জন্য ব্যবহৃত দুটি ফাংশন পার্সিয়ান্ট এবং পার্সফ্লোট। পার্সিং চুপচাপ থামবে যদি এটি এমন কোনও চরিত্রকে আঘাত করে যা এটি স্বীকৃতি দেয় না, যা "92px" এর মতো স্ট্রিং পার্সিংয়ের জন্য কার্যকর হতে পারে তবে এটি কিছুটা বিপজ্জনকও, কারণ এটি আপনাকে খারাপ ইনপুটটিতে কোনও ধরণের ত্রুটি দেয় না, পরিবর্তে আপনি স্ট্রিংটি একটি সংখ্যার সাথে শুরু না হলে NAN ফিরিয়ে আনব। স্ট্রিংয়ের শুরুতে হোয়াইটস্পেস উপেক্ষা করা হয়। আপনি যা চান তার থেকে আলাদা কিছু করা এবং কোনও কিছুতে ভুল হয়েছে এমন ইঙ্গিত না দেওয়া এর উদাহরণ এখানে দেওয়া হয়েছে:

var widgetsSold = parseInt("97,800", 10); // widgetsSold is now 97

সর্বদা দ্বিতীয় যুক্তি হিসাবে রেডিক্স নির্দিষ্ট করা ভাল অনুশীলন। পুরানো ব্রাউজারগুলিতে, যদি স্ট্রিংটি 0 দিয়ে শুরু হয় তবে এটি যদি অডটাল হিসাবে ব্যাখ্যা করা হয় তবে যদি রেডিক্সটি নির্দিষ্ট না করা হত যা প্রচুর মানুষকে অবাক করে দিয়েছিল। হেক্সাডেসিমালের জন্য আচরণটি 0x দিয়ে স্ট্রিং শুরু করে ট্রিগার করা হয় যদি কোনও রেডিক্স নির্দিষ্ট না করা হয়, যেমন 0xff। মানকটি বাস্তু স্ক্রিপ্ট 5 দিয়ে পরিবর্তিত হয়েছে, সুতরাং আধুনিক ব্রাউজারগুলি অষ্টালকে আর ট্রিগার করতে পারে না যখন কোনও রেডিক্স নির্দিষ্ট না করা থাকে leading পার্সিয়ান্ট বেস ৩ 36 পর্যন্ত রেডিক্সগুলি বোঝে, সেক্ষেত্রে উপরের এবং নিম্নের উভয় অক্ষরকে সমতুল্য হিসাবে বিবেচনা করা হয়।

একটি সংখ্যায় একটি স্ট্রিংয়ের ধরণ পরিবর্তন করা

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

var cast = Number("97");

পার্স পদ্ধতিতে এটির আলাদা আচরণ রয়েছে (যদিও এটি এখনও সাদা স্থানকে উপেক্ষা করে)। এটি আরও কঠোর: যদি এটি স্ট্রিংটি ফিরে আসার চেয়ে পুরোটা বুঝতে না পারে NaN, তবে আপনি স্ট্রিংয়ের মতো এটি ব্যবহার করতে পারবেন না 97px। যেহেতু আপনি একটি নম্বর মোড়কের বস্তুর পরিবর্তে আদিম সংখ্যা চান, তাই নিশ্চিত করুন যে আপনি newসংখ্যা ফাংশনের সামনে রাখছেন না।

স্পষ্টতই, একটি সংখ্যায় রূপান্তরকরণ আপনাকে এমন একটি মান দেয় যা পূর্ণসংখ্যার চেয়ে ভাসমান হতে পারে, সুতরাং আপনি যদি পূর্ণসংখ্যার চান তবে আপনার এটি পরিবর্তন করতে হবে। এটি করার কয়েকটি উপায় রয়েছে:

var rounded = Math.floor(Number("97.654"));  // other options are Math.ceil, Math.round
var fixed = Number("97.654").toFixed(0); // rounded rather than truncated
var bitwised = Number("97.654")|0;  // do not use for large numbers

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

~~"3000000000.654" === -1294967296
// This is the same as
Number("3000000000.654")|0
"3000000000.654" >>> 0 === 3000000000 // unsigned right shift gives you an extra bit
"300000000000.654" >>> 0 === 3647256576 // but still fails with larger numbers

বৃহত সংখ্যার সাথে সঠিকভাবে কাজ করতে, আপনার বৃত্তাকার পদ্ধতিগুলি ব্যবহার করা উচিত

Math.floor("3000000000.654") === 3000000000
// This is the same as
Math.floor(Number("3000000000.654"))

বিয়ার মন যে এই পদ্ধতি সব বুঝতে সূচকীয় স্বরলিপি, তাই 2e2হয় 200NaN বদলে। এছাড়াও, সংখ্যা "ইনফিনিটি" বোঝে, যখন পার্স পদ্ধতিগুলি না করে।

প্রথা

এই পদ্ধতিগুলির যে কোনওটি আপনি যা চান ঠিক তেমন করে তা অসম্ভব। উদাহরণস্বরূপ, সাধারণত পার্সিং ব্যর্থ হলে আমি একটি ত্রুটি নিক্ষেপ করতে চাই এবং আমার জন্য ইনফিনিটি, এক্সপেনসিয়েন্টাল বা নেতৃস্থানীয় হোয়াইটস্পেসের জন্য সমর্থন প্রয়োজন না। আপনার ব্যবহারের উপর নির্ভর করে, কখনও কখনও এটি একটি কাস্টম রূপান্তর ফাংশন লিখতে বোধ করে।

সর্বদা পরীক্ষা করুন যে সংখ্যার আউটপুট বা কোনও পার্স পদ্ধতিতে আপনার প্রত্যাশিত সংখ্যার সাজানো। আপনি isNaNনম্বরটি নিশ্চিত হন না এটি নিশ্চিত করতে আপনি অবশ্যই অবশ্যই ব্যবহার করতে চাইবেন (সাধারণত একমাত্র উপায় যা আপনি জানতে পারেন যে পার্স ব্যর্থ হয়েছে)।


6
এটি আপনার কোডটিও গ্রহণ করে 97,8,00এবং অনুরূপ কিনা তা নির্ভর করে । একটি সহজ কৌশলটি এমনটি করা .replace(/[^0-9]/g, "")যা আপনার স্ট্রিং থেকে সমস্ত অ-অঙ্ক সরিয়ে ফেলবে এবং তারপরে রূপান্তরটি করবে। এটি অবশ্যই সমস্ত ধরণের পাগল স্ট্রিংগুলিকে উপেক্ষা করবে যা আপনার সম্ভবত কেবল বিশ্লেষণ করার পরিবর্তে ত্রুটি করা উচিত ...
kybernetikos

6
@ কাইবারনেটিকোস সম্ভবত হওয়া উচিত .replace(/[^0-9.]/g, ""), অন্যথায় "1.05" "105" হয়ে যাবে।
জে.স্টেভ

একদম ঠিক, যদিও আমি গুরুত্বপূর্ণ কোডের জন্য এর মতো কিছু ব্যবহার করি না - এমন অনেকগুলি উপায় রয়েছে যা এটি আপনার মাধ্যমে কোনও কিছুকে সত্যিকার অর্থে প্রবেশ করতে দিতে চান না।
কায়বার্নটিকোস

2
আমি কোডটিতে সংখ্যাটি আরও বেশি পঠনযোগ্য দেখতে পেয়েছি সুতরাং সমাধান হিসাবে এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ।
carlin.scott

1
@ কেবারনেটিকোস ইন var fixed = Number("97.654").toFixed(0); // rounded rather than truncated, আমরা একটি (পূর্ণসংখ্যার) পরিবর্তে একটি ( পদ্ধতির stringকারণে .toFixed) পাচ্ছি number। আমরা যদি গোলাকার পূর্ণসংখ্যাটি চাই তবে সম্ভবত এটি ব্যবহার করা আরও ভালMath.round("97.654");
এডু জামোরা


37

দ্রুততম

var x = "1000"*1;

পরীক্ষা

এখানে গতির সামান্য তুলনা করা হচ্ছে (কেবলমাত্র ম্যাক ওস) ... :)

ক্রোম 'প্লাস' এবং 'মুল' দ্রুত (> 700,000,00 ওপেন / সেকেন্ড) এর জন্য, 'ম্যাথ.ফ্লুর' সবচেয়ে ধীর। ফায়ারফক্সের জন্য 'প্লাস' সবচেয়ে ধীর (!) 'মুল' দ্রুত (> 900,000,000 অপ / সেকেন্ড)। সাফারিতে 'পার্সিয়ান্ট' দ্রুততম, 'সংখ্যা' সবচেয়ে ধীরে (তবে রেজুলেটগুলি বেশ সমান,> 13,000,000 <31,000,000)। সুতরাং কাস্ট স্ট্রিংয়ের জন্য সাফারি অন্য ব্রাউজারগুলির চেয়ে 10x এর চেয়ে ধীর। সুতরাং বিজয়ী হ'ল ' মুল ' :)

আপনি এই লিঙ্কটি আপনার ব্রাউজারে এটি চালাতে পারেন https://jsperf.com/js-cast-str-to-number/1

এখানে চিত্র বর্ণনা লিখুন

হালনাগাদ

আমি এটিও পরীক্ষা করে দেখি var x = ~~"1000";- ক্রোম এবং সাফারি var x = "1000"*1(<1%) এর চেয়ে কিছুটা ধীরে ধীরে , ফায়ারফক্সে কিছুটা দ্রুত (<1%) দ্রুত। আমি উপরে ছবি এবং পরীক্ষা আপডেট


36

যদিও পুরানো প্রশ্ন, তবে এটি কারও পক্ষে সহায়ক হতে পারে।

আমি স্ট্রিংটি ইনটি সংখ্যায় রূপান্তর করার এই পদ্ধতিটি ব্যবহার করি

var str = "25";       // string
var number = str*1;   // number

সুতরাং, 1 দিয়ে গুণ করলে, মান পরিবর্তন হয় না, তবে জেএস স্বয়ংক্রিয়ভাবে একটি সংখ্যা ফেরত দেয়।

তবে যেমনটি নীচে প্রদর্শিত হয়েছে, এটি ব্যবহার করা উচিত যদি আপনি নিশ্চিত হন যে strসংখ্যাটি (বা একটি সংখ্যা হিসাবে উপস্থাপিত হতে পারে), অন্যথায় এটি NaN ফিরিয়ে দেবে - একটি সংখ্যা নয়।

আপনি যেমন ব্যবহার করতে সাধারণ ফাংশন তৈরি করতে পারেন

function toNumber(str) {
   return str*1;
}

এখানে চিত্র বর্ণনা লিখুন


33

পার্সিয়ান্ট চেষ্টা করুন।

var number = parseInt("10", 10); //number will have value of 10.

4
আপনি সম্ভবত এটির সাথে র‌্যাডিক্সও অন্তর্ভুক্ত করতে চান : var সংখ্যা = parseInt ("10", 10);
জোয়েল কোহোর্ন

27

আমি এখানে ভুল উত্তর পোস্ট করেছি, দুঃখিত। স্থির করেছি।

এটি একটি পুরানো প্রশ্ন, তবে আমি এই কৌশলটি পছন্দ করি:

~~"2.123"; //2
~~"5"; //5

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

সম্পাদনা: অন্য পদ্ধতিটি আমি এখানে কেবল দেখেছি (জাভাস্ক্রিপ্ট >>> অপারেটর সম্পর্কে একটি প্রশ্ন যা শূন্য-পূরণের ডান শিফট) যা দেখায় যে এই অপারেটরের সাথে 0 দ্বারা একটি সংখ্যা স্থানান্তর করাকে একটি ইউন্ট 32 তে রূপান্তর করে যা আপনি যদি ভাল তবে ভাল এছাড়াও এটি স্বাক্ষরবিহীন চাই । আবার এটি স্বাক্ষরবিহীন পূর্ণসংখ্যায় রূপান্তরিত হয় , যা আপনি স্বাক্ষরযুক্ত নম্বর ব্যবহার করলে অদ্ভুত আচরণের দিকে পরিচালিত করতে পারে।

"-2.123" >>> 0; // 4294967294
"2.123" >>> 0; // 2
"-5" >>> 0; // 4294967291
"5" >>> 0; // 5

19

আপনি যদি বৈজ্ঞানিক স্বরলিপিতে একটি ফ্লোটকে রূপান্তর করতে পার্সিয়ান্ট ব্যবহার করেন তবে সাবধান! উদাহরণ স্বরূপ:

parseInt("5.6e-14") 

ফলাফল হবে

5 

পরিবর্তে

0

14
ব্যবহারের parseIntফলে ভাসা চলবে না। parseFloatএই ক্ষেত্রে সঠিকভাবে কাজ করে।
বেনকাস্টাহ

16

একটি স্ট্রিংকে পূর্ণসংখ্যার সাথে রূপান্তর করতে, আমি পার্সফ্লোট এবং নট পার্সেইন্ট ব্যবহার করার পরামর্শ দিচ্ছি । কারণটা এখানে:

পার্সফ্লোট ব্যবহার:

parseFloat('2.34cms')  //Output: 2.34
parseFloat('12.5')     //Output: 12.5
parseFloat('012.3')    //Output: 12.3

পার্সেন্ট ব্যবহার:

parseInt('2.34cms')  //Output: 2
parseInt('12.5')     //Output: 12
parseInt('012.3')    //Output: 12

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


6
প্রশ্নটি ছিল "আমি কীভাবে একটি
স্ট্রিংকে

15

পার্শ্ব নোট হিসাবেও: মটুলগুলি টু ইন্ট () ব্যবহার করে যা কোনও স্থানীয় স্ট্রিং (বা ভাসা (বা পূর্ণসংখ্যা)) এ ব্যবহৃত হয়।

"2".toInt()   // 2
"2px".toInt() // 2
2.toInt()     // 2

7
তৃতীয় উদাহরণটির কারণ a SyntaxError, আপনার একটি ডাবল ডট ব্যবহার করা উচিত, উদাহরণস্বরূপ: 2..toInt();প্রথম বিন্দুটি Numberআক্ষরিকের উপস্থাপনাটি শেষ করবে এবং দ্বিতীয় বিন্দুটি সম্পত্তি অ্যাক্সেসর।
সিএমএস

2
এই প্রশ্নটি জাভাস্ক্রিপ্ট সম্পর্কে মটুলগুলি সম্পর্কে নয়।
লিয়াম

14

দয়া করে নীচের উদাহরণটি দেখুন t এটি আপনার সন্দেহ দূর করতে সহায়তা করবে

Example                  Result

parseInt("4")            4
parseInt("5aaa")         5
parseInt("4.33333")      4
parseInt("aaa");         NaN (means "Not a Number")

পার্সিন্ট ফাংশন ব্যবহার করে এটি কেবলমাত্র পূর্ণসংখ্যার উপস্থিতি সরবরাহ করবে, স্ট্রিংকে নয়


12

আমরা ব্যবহারের +(stringOfNumber)পরিবর্তে ব্যবহার করতে পারিparseInt(stringOfNumber)

উদা: +("21")আয় 21 মত int parseInt("21")

আমরা ফ্লোটকে পার্সিংয়ের জন্য এই আনরিয়ার অপারেটরটিও ব্যবহার করতে পারি ...


1
তবে আপনি এটি সূত্রে ব্যবহার করতে পারবেন না! অর্থাত (1 + ("21")) * 10 === 1210!
আলেকজান্ডার ভ্যাসিলিভ

2
@ আলেকজান্ডার ভ্যাসিলিভ আমি মনে করি আপনি পারবেন, আপনি কি কেবল চারপাশে একটি অতিরিক্ত বন্ধনী ব্যবহার করবেন না +?
NiCk নিউম্যান

@ নাইক্কিউইউম্যান আমাদের মন্তব্য করা উত্তরের উদাহরণ থেকে আমি + ("21") পেয়েছি।
আলেকজান্ডার ভ্যাসিলিভ

আমি এই সমাধানটি সত্যিই অপছন্দ করি। এটি parseIntযেমন স্পষ্ট হয় না। একটি সাধারণ বাস্তবায়ন const myNumber = +myNumberAsAStringযা প্রথম নজরে কোনও স্ট্যান্ডার্ড +=বা =+অপারেটরের মতো লাগে । এছাড়াও যদি ভুলভাবে ব্যবহার করা হয় তবে এটি সংক্ষিপ্ততর ত্রুটি হতে পারে। এই সমাধানটি 0 এর উপর ভিত্তি করে যে কোনও সংখ্যা সরবরাহ করা হয় না তখন 0 বাম দিক হিসাবে ধরে নেওয়া হয়।
ঝড় মুলার

11

একটি স্ট্রিংটিকে একটি সংখ্যার মানে রূপান্তর করার জন্য জাভাস্ক্রিপ্টে অনেকগুলি উপায় রয়েছে ... সমস্ত সাধারণ এবং সহজ, আপনার জন্য কোনটি কাজ করে তা চয়ন করুন:

var num = Number("999.5"); //999.5
var num = parseInt("999.5", 10); //999
var num = parseFloat("999.5"); //999.5
var num = +"999.5"; //999.5

এছাড়াও কোনও ম্যাথ ক্রিয়াকলাপ তাদেরকে সংখ্যায় রূপান্তর করে, উদাহরণস্বরূপ ...

var num = "999.5" / 1; //999.5
var num = "999.5" * 1; //999.5
var num = "999.5" - 1 + 1; //999.5
var num = "999.5" - 0; //999.5
var num = Math.floor("999.5"); //999
var num = ~~"999.5"; //999

আমার পছন্দের উপায়টি +সাইন ব্যবহার করা হচ্ছে যা জাভাস্ক্রিপ্টে একটি স্ট্রিংকে সংখ্যায় রূপান্তর করার মার্জিত উপায়।


10

str - 0রূপান্তর stringকরার চেষ্টা করুন number

> str = '0'
> str - 0
  0
> str = '123'
> str - 0
  123
> str = '-12'
> str - 0
  -12
> str = 'asdf'
> str - 0
  NaN
> str = '12.34'
> str - 0
  12.34

স্ট্রিংকে ইনটে রূপান্তর করার বিভিন্ন উপায়ের পারফরম্যান্সের তুলনা করতে এখানে দুটি লিঙ্ক রয়েছে are

https://jsperf.com/number-vs-parseint-vs-plus

http://phrogz.net/js/string_to_number.html


1
@AlexanderYau, এই প্রতি ডক , '1'রূপান্তরিত হবে 1দ্বারা ToNumber, তারপর 1 - 0হবে1
zangw

8

গুগল আমাকে এই উত্তরটি ফলাফল হিসাবে দিয়েছে, তাই ...

আমার আসলে সি এবং জাভাস্ক্রিপ্টের মধ্যে একটি বাঁধার জন্য একটি স্ট্রিংটি একটি পূর্ণসংখ্যা হিসাবে "সংরক্ষণ" করা দরকার ছিল, তাই আমি স্ট্রিংটিকে একটি পূর্ণসংখ্যার মানতে রূপান্তর করি:

/*
    Examples:
        int2str( str2int("test") ) == "test" // true
        int2str( str2int("t€st") ) // "t¬st", because "€".charCodeAt(0) is 8364, will be AND'ed with 0xff
    Limitations:
        max 4 chars, so it fits into an integer
*/
function str2int(the_str) {
    var ret = 0;
    var len = the_str.length;
    if (len >= 1) ret += (the_str.charCodeAt(0) & 0xff) <<  0;
    if (len >= 2) ret += (the_str.charCodeAt(1) & 0xff) <<  8;
    if (len >= 3) ret += (the_str.charCodeAt(2) & 0xff) << 16;
    if (len >= 4) ret += (the_str.charCodeAt(3) & 0xff) << 24;
    return ret;
}
function int2str(the_int) {
    var tmp = [
        (the_int & 0x000000ff) >>  0,
        (the_int & 0x0000ff00) >>  8,
        (the_int & 0x00ff0000) >> 16,
        (the_int & 0xff000000) >> 24
    ];
    var ret = "";
    for (var i=0; i<4; i++) {
        if (tmp[i] == 0)
            break;
        ret += String.fromCharCode(tmp[i]);
    }
    return ret;
}

4
4-বাইট মানগুলি সংরক্ষণ এবং পুনরুদ্ধার করার এটি একটি আকর্ষণীয় উপায়। এটি প্রশ্নের প্রচলিত ব্যাখ্যার উত্তর দেয় না: কোনও সংখ্যার একটি স্ট্রিং উপস্থাপনা কীভাবে পূর্ণসংখ্যার মানতে রূপান্তর করতে হয়। নির্বিশেষে, যদি আপনার int2strবাইট 0 হয় তবে আপনার ফাংশনটি বন্ধ হয়ে যায় যা মানটির মধ্যে একটি বৈধ উপাদান হতে পারে, তাই if... ... breakসরানো উচিত যাতে আপনি একটি সম্পূর্ণ 4-বাইট মান ফেরত পাবেন।
সানক্যাট 2000

8

আমার মতে, কোনও উত্তর কোনও প্রান্তের কেসকে কভার করে না কারণ একটি ফ্লোটকে পার্সিং করার ফলে একটি ত্রুটি হতে পারে।

function parseInteger(value) {
    if(value === '') return NaN;
    const number = Number(value);
    return Number.isInteger(number) ? number : NaN;
}
parseInteger("4")            // 4
parseInteger("5aaa")         // NaN
parseInteger("4.33333")      // NaN
parseInteger("aaa");         // NaN

1
নোট নম্বর না পাওয়া ফ্লোটের জন্য কিছুটা আক্রমণাত্মক, আপনি কি ভাবেন না?
থমাস আইয়ুব

2
এটা parseInteger, না parseNumber। আমি অনুমান করি যে প্রতিটি সমাধানই কার্যকর নয় কারণ জেএস পূর্ণসংখ্যা সমর্থন করে না এবং পৃথক ধরণের হিসাবে ভাসমান। আমরা ফিরে আসতে পারে nullপরিবর্তে NaNযদি না একটি সংখ্যা বিভ্রান্তিকর হয়।
মিচা নাপিক


2

উপরের সবগুলোই সঠিক. অনুগ্রহ করে নিশ্চিত হয়ে নিন যে এটি আগে টাইপট x === 'সংখ্যা' "করে স্ট্রিংয়ের একটি নম্বর, এটি এনএএন ফিরে আসবে

 var num = "fsdfsdf242342";
 typeof num => 'string';

 var num1 = "12423";
 typeof num1 => 'number';
 +num1 = > 12423`

নোড v8.5.0 এ, var num1 = "12423"; typeof num1;রিটার্ন দেয় string
এডু জামোরা

2

আর একটি বিকল্প হ'ল এক্সওআরটি নিজের সাথে মান দ্বিগুণ করা:

var i = 12.34;
console.log('i = ' + i);
console.log('i ⊕ i ⊕ i = ' + (i ^ i ^ i));

এটি আউটপুট দেবে:

i = 12.34
i  i  i = 12

2

আমি স্ট্রিংয়ের আগে কেবল একটি প্লাস (+) যুক্ত করেছি এবং এটি ছিল সমাধান!

+"052254" //52254

আশা করি এটা সাহায্য করবে ;)


2

দশটির নিজ নিজ ক্ষমতার সাথে অঙ্কের গুণনের যোগফল:

অর্থ: 123 = 100 + 20 + 3 = 1 * 100 + 2 + 10 + 3 * 1 = 1 * (10 ^ 2) + 2 * (10 ^ 1) + 3 * (10 ^ 0)

function atoi(array) {

// use exp as (length - i), other option would be to reverse the array.
// multiply a[i] * 10^(exp) and sum

let sum = 0;

for (let i = 0; i < array.length; i++) {
    let exp = array.length-(i+1);
    let value = array[i] * Math.pow(10,exp);
    sum+=value;
}

return sum;

}



1

আমি এটি ব্যবহার করি

String.prototype.toInt = function (returnval) { 
    var i = parseInt(this);
    return isNaN(i) ? returnval !== undefined ? returnval : - 1  :      i; 
}

এইভাবে আমি সর্বদা একটি int ফিরে পেতে।


1

আপনি একটি বৈধ পূর্ণসংখ্যার পেতে নিরাপদ উপায়:

let integer = (parseInt(value, 10) || 0);

উদাহরণ:

// Example 1 - Invalid value:
let value = null;
let integer = (parseInt(value, 10) || 0);
// => integer = 0
// Example 2 - Valid value:
let value = "1230.42";
let integer = (parseInt(value, 10) || 0);
// => integer = 1230
// Example 3 - Invalid value:
let value = () => { return 412 };
let integer = (parseInt(value, 10) || 0);
// => integer = 0

1
function parseIntSmarter(str) {
    // ParseInt is bad because it returns 22 for "22thisendsintext"
    // Number() is returns NaN if it ends in non-numbers, but it returns 0 for empty or whitespace strings.
    return isNaN(Number(str)) ? NaN : parseInt(str, 10);
}

1

আপনি প্লাস ব্যবহার করতে পারেন, উদাহরণস্বরূপ =>

var personAge = '24'; var personAge1 = (+ ব্যক্তি এজ)

তারপরে আপনি টাইপফোন ব্যক্তি বয়স দেখতে পারেন number

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