एक स्ट्रिंग को जावास्क्रिप्ट में पूर्णांक में कैसे बदलें?


1695

मैं एक स्ट्रिंग को जावास्क्रिप्ट में पूर्णांक में कैसे बदलूं?


1
इस पृष्ठ के तल में एक महान तालिका है जो रूपांतरण करने के विभिन्न तरीकों की तुलना करती है: medium.com/@nikjohn/…
जॉन गिलमर

जवाबों:


2151

देशी Numberफ़ंक्शन का उपयोग करने का सबसे सरल तरीका होगा :

var x = Number("1000")

कि आप के लिए काम नहीं करता है, तो देखते हैं parseInt , एकल प्लस , फर्श के साथ parseFloat , और गणित.गोल तरीकों।

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

या, यदि आप कई बार Math.floor का उपयोग करने जा रहे हैं:

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

यदि आप उस प्रकार हैं, जो जब आप parseInt कहते हैं, तो आप मूलांक लगाना भूल जाते हैं, आप parseFloat का उपयोग कर सकते हैं और इसे गोल कर सकते हैं, हालाँकि आप इसे पसंद करते हैं। यहां मैं फर्श का उपयोग करता हूं।

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

दिलचस्प बात यह है कि Math.round (जैसे Math.floor) एक स्ट्रिंग को संख्या रूपांतरण के लिए करेगा, इसलिए यदि आप संख्या को गोल करना चाहते हैं (या यदि आपके पास स्ट्रिंग में पूर्णांक है), तो यह एक शानदार तरीका है, शायद मेरा पसंदीदा:

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

1
jsperf.com/performance-of-parseint/29 , hy @jedierikb i को jsperf लिंक संपादित किया गया था। जोड़ना '4'>>0और '4'>>>0
इमैनियाक्स

6
2015 तक अपडेट करें: ईसीएमएस्क्रिप्ट 5 के रूप में, एक प्रमुख शून्य "0" के साथ तार भी डिफ़ॉल्ट मूलांक 10 प्राप्त करते हैं, इसके बजाय 8. स्पष्ट रूप से निर्दिष्ट मूलांक 10 केवल पुराने ब्राउज़रों के लिए आवश्यक है। kangax.github.io/compat-table/es5/…
Grilse

19
ध्यान दें कि नंबर ('') सफल होता है (0 लौटता है), भले ही ज्यादातर लोग वैध संख्या का प्रतिनिधित्व करने के लिए खाली स्ट्रिंग पर विचार नहीं करेंगे। और parseInt ('3q') सफल (3 वापसी) भले ही ज्यादातर लोग '3q' को एक वैध संख्या नहीं मानते।
डेव पाचेको

3
सचेत। दोनों parseIntऔर parseFloatखुशी से पत्र स्वीकार करते हैं। केवल निरंतर Numberलौटता है NaN
कार्ल पोकस

2
मेरी राय में, एक पूर्णांक को पार्स करने का परिणाम अपवाद के साथ होना चाहिए / NaNप्रत्येक मूल्य के लिए जो बिल्कुल पूर्णांक नहीं है। इसलिए इन में से कोई भी काम नहीं करता Number('2.2')है 2और Number('')0.23 के लिए
जोर-जबरदस्ती करता है

225

ParseInt फ़ंक्शन आज़माएँ:

var number = parseInt("10");

लेकिन एक समस्या है। यदि आप पार्सइंट फ़ंक्शन का उपयोग करके "010" को बदलने की कोशिश करते हैं, तो यह ऑक्टल नंबर के रूप में पता लगाता है, और नंबर 8 पर लौटेगा। इसलिए, आपको एक मूलांक (2 से 36 तक) निर्दिष्ट करने की आवश्यकता है। इस मामले में बेस 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
2016 में मूलांक की आवश्यकता नहीं है।

7
यह नए ब्राउज़रों के लिए नहीं हो सकता है, लेकिन पीछे की संगतता के लिए मूलांक अभी भी आवश्यक है।
प्रोग्रामिंग

'', या '02 "या" 02 + 1 ", या" 03,12 "या" 03.12 "के बारे में क्या?
स्टैकडेव

3
ध्यान दें कि यह संख्या के बाद खराब डेटा को अनदेखा करता है। उदाहरण के लिए, parseInt('0asdf', 10)उत्पादन करता है 0
सैम

121

जावास्क्रिप्ट में एक स्ट्रिंग को संख्या में बदलने के दो मुख्य तरीके हैं। एक तरीका यह है कि इसे पार्स किया जाए और दूसरा तरीका यह है कि इसके प्रकार को संख्या में बदल दिया जाए। अन्य उत्तरों में सभी तरकीबें (जैसे यूनीरी प्लस) में स्ट्रिंग के प्रकार को एक संख्या में सम्मिलित करना शामिल है। आप नंबर फ़ंक्शन के साथ भी स्पष्ट रूप से एक ही काम कर सकते हैं।

पदच्छेद

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

parseInt और parseFloat दो कार्य हैं जिनका उपयोग संख्याओं में तार लगाने के लिए किया जाता है। पार्सिंग चुपचाप बंद हो जाएगा अगर यह एक चरित्र को हिट करता है जो इसे पहचानता नहीं है, जो "92px" जैसे तार को पार्स करने के लिए उपयोगी हो सकता है, लेकिन यह भी कुछ हद तक खतरनाक है, क्योंकि यह आपको खराब इनपुट पर किसी भी तरह की त्रुटि नहीं देगा, बजाय आप जब तक स्ट्रिंग एक संख्या से शुरू नहीं होती है, तब तक NaN वापस नहीं मिलेगा। स्ट्रिंग की शुरुआत में व्हाट्सएप को नजरअंदाज किया जाता है। यहाँ इसका एक उदाहरण है कि आप क्या चाहते हैं, कुछ अलग कर रहे हैं और कोई संकेत नहीं दे रहे हैं कि कुछ भी गलत हुआ:

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

रेडिक्स को हमेशा दूसरे तर्क के रूप में निर्दिष्ट करना अच्छा है। पुराने ब्राउज़रों में, यदि स्ट्रिंग 0 से शुरू होती है, तो इसकी व्याख्या अष्टक के रूप में की जाएगी यदि मूलांक निर्दिष्ट नहीं किया गया था जो बहुत सारे लोगों को आश्चर्यचकित करता है। यदि कोई मूलांक निर्दिष्ट नहीं किया गया है, तो 0x के साथ स्ट्रिंग प्रारंभ होने से हेक्साडेसिमल के लिए व्यवहार शुरू हो जाता है 0xff। मानक वास्तव में एक्मास्क्रिप्ट 5 के साथ बदल गया है, इसलिए आधुनिक ब्राउज़र अब ओक्टेल को ट्रिगर नहीं करते हैं जब एक प्रमुख 0 होता है यदि कोई मूलांक निर्दिष्ट नहीं किया गया है। parseInt मूलांक 36 को मूलांक समझता है, इस मामले में ऊपरी और निचले दोनों प्रकार के अक्षरों को बराबर माना जाता है।

किसी संख्या में स्ट्रिंग का प्रकार बदलना

ऊपर बताए गए अन्य ट्रिक्स जो parseInt का उपयोग नहीं करते हैं, उनमें अंतर्निहित संख्या में स्ट्रिंग को जबरदस्ती शामिल करना शामिल है। मैं यह स्पष्ट रूप से करना पसंद करता हूं,

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 के बजाय है। इसके अलावा, संख्या "इन्फिनिटी" को समझती है, जबकि पार्स तरीके नहीं हैं।

रिवाज

यह संभव नहीं है कि इनमें से कोई भी तरीका ठीक वैसा ही हो जैसा आप चाहते हैं। उदाहरण के लिए, आमतौर पर मैं एक त्रुटि चाहता हूं कि यदि पार्सिंग विफल हो जाती है, और मुझे इन्फिनिटी, घातांक या अग्रणी व्हाट्सएप के लिए समर्थन की आवश्यकता नहीं है। अपने usecase के आधार पर, कभी-कभी यह कस्टम रूपांतरण फ़ंक्शन लिखने के लिए समझ में आता है।

हमेशा जांच लें कि नंबर या पार्स तरीकों में से एक आउटपुट आपकी अपेक्षित संख्या का प्रकार है। आप लगभग निश्चित रूप isNaNसे यह सुनिश्चित करने के लिए उपयोग करना चाहेंगे कि संख्या NaN नहीं है (आमतौर पर एकमात्र तरीका है जिससे आपको पता चलता है कि पार्स विफल हुआ)।


6
यह निर्भर करता है कि आप चाहते हैं कि आपका कोड भी स्वीकार करे 97,8,00और समान हो या न हो। एक सरल ट्रिक यह है कि आप .replace(/[^0-9]/g, "")अपने स्ट्रिंग से सभी गैर अंकों को हटा दें और उसके बाद रूपांतरण करें। यह निश्चित रूप से पागल स्ट्रिंग्स के सभी प्रकार की अनदेखी करेगा जो आपको शायद सिर्फ पार्स करने के बजाय त्रुटि करना चाहिए ...
kybernetikos

6
@kybernetikos शायद होना चाहिए .replace(/[^0-9.]/g, ""), अन्यथा "1.05" "105" बन जाएगा।
जे।

ठीक है, हालांकि मैं महत्वपूर्ण कोड के लिए वैसे भी कुछ का उपयोग नहीं करूंगा - बहुत सारे तरीके हैं जो आपके माध्यम से कुछ ऐसा कर सकते हैं जो वास्तव में आपके माध्यम से नहीं करना चाहते हैं।
किबरनेटिको

2
मैंने कोड में संख्या को अधिक पठनीय का उपयोग करते हुए पाया, इसलिए इसे समाधान के रूप में इंगित करने के लिए धन्यवाद।
carlin.scott

1
@kybernetikos में 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 से अधिक / सेकंड) के लिए, 'Math.floor' सबसे धीमा है। फ़ायरफ़ॉक्स के लिए 'प्लस' सबसे धीमा (!) 'Mul' सबसे तेज़ (> 900,000,000 से अधिक / सेकंड) है। सफारी में 'parseInt' उपवास है, 'संख्या' सबसे धीमी है (लेकिन रेसुलैट्स काफी समान हैं,> 13,000,000 <31,000,000)। तो कास्ट स्ट्रिंग टू इंट के लिए सफारी अन्य ब्राउज़रों की तुलना में 10 गुना धीमी है। तो विजेता ' मुल ' है :)

आप इसे इस लिंक https://jsperf.com/js-cast-str-to-number/1 द्वारा अपने ब्राउज़र पर चला सकते हैं

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

अपडेट करें

मैं यह भी परीक्षण करता हूं var x = ~~"1000";- क्रोम और सफारी पर var x = "1000"*1(<1%) की तुलना में थोड़ा धीमा है , फ़ायरफ़ॉक्स पर थोड़ा तेज़ है (<1%)। मैं चित्र और परीक्षण से ऊपर अद्यतन करता हूं


36

हालांकि एक पुराना सवाल है, लेकिन शायद यह किसी के लिए मददगार हो सकता है।

मैं स्ट्रिंग को int संख्या में परिवर्तित करने के इस तरीके का उपयोग करता हूं

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

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

लेकिन जैसा कि नीचे दिखाया गया है, इसका उपयोग तब किया जाना चाहिए जब आप सुनिश्चित हों कि strएक संख्या है (या एक संख्या के रूप में प्रतिनिधित्व किया जा सकता है), अन्यथा यह NaN लौटाएगा - संख्या नहीं।

आप उपयोग करने के लिए सरल कार्य बना सकते हैं, जैसे

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

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


33

ParseInt का प्रयास करें।

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

4
आप शायद इसके साथ मूलांक भी शामिल करना चाहते हैं: var संख्या = parseInt ("10", 10);
जोएल कोएहॉर्न

27

मैंने यहाँ गलत उत्तर पोस्ट किया, क्षमा करें। तय की।

यह एक पुराना सवाल है, लेकिन मुझे यह चाल पसंद है:

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

दशमलव बिंदु के बाद डबल बिटवाइज़ निगेटिव कुछ भी छोड़ देता है और इसे एक नंबर फॉर्मेट में बदल देता है। मुझे बताया गया है कि यह कॉलिंग फ़ंक्शंस और व्हाट्सएप से थोड़ा तेज़ है, लेकिन मैं पूरी तरह से आश्वस्त नहीं हूं।

संपादित करें: एक और तरीका जो मैंने अभी यहां देखा (जावास्क्रिप्ट के बारे में एक प्रश्न >>> ऑपरेटर, जो कि एक शून्य-भरण दाईं पारी है), जो दर्शाता है कि इस संचालक के साथ किसी संख्या को 0 से स्थानांतरित करना एक संख्या को uint32 में रूपांतरित करता है जो कि अच्छा है यदि आप यह भी अहस्ताक्षरित चाहते हैं । फिर से, यह एक अहस्ताक्षरित पूर्णांक में परिवर्तित हो जाता है , जिससे यदि आप हस्ताक्षरित संख्या का उपयोग करते हैं तो अजीब व्यवहार हो सकता है।

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

19

यदि आप वैज्ञानिक संकेतन में फ्लोट को परिवर्तित करने के लिए parseInt का उपयोग करते हैं तो सावधान रहें! उदाहरण के लिए:

parseInt("5.6e-14") 

में परिणाम होगा

5 

के बजाय

0

14
का उपयोग करते हुए parseIntएक नाव के लिए सही काम नहीं करेगा। parseFloatइस मामले में ठीक से काम करता है।
बेनेकास्तह

16

स्ट्रिंग को इंटेगर में बदलने के लिए, मैं parseFloat और NOT parseInt का उपयोग करने की सलाह देता हूं । यहाँ पर क्यों:

ParseFloat का उपयोग करना:

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

ParseInt का उपयोग करना:

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

इसलिए यदि आपने देखा है कि दशमांश दशमलव के बाद के मूल्यों को छोड़ देता है, जबकि पारसेफ्लोट आपको फ्लोटिंग पॉइंट संख्याओं के साथ काम करने देता है और इसलिए यदि आप दशमलव के बाद मूल्यों को बनाए रखना चाहते हैं तो अधिक उपयुक्त है। ParseInt का उपयोग करें यदि और केवल यदि आप सुनिश्चित हैं कि आप पूर्णांक मूल्य चाहते हैं।


6
सवाल यह था कि "मैं एक स्ट्रिंग को जावास्क्रिप्ट में एक पूर्णांक में कैसे
बदलूं

15

साइड नोट के रूप में भी: Mootools में फ़ंक्शन है toInt () जो किसी भी मूल स्ट्रिंग (या फ्लोट (या पूर्णांक)) पर उपयोग किया जाता है।

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

7
तीसरा उदाहरण एक कारण बनता है SyntaxError, आपको एक डबल डॉट का उपयोग करना चाहिए, उदाहरण के लिए: 2..toInt();पहला डॉट एक Numberशाब्दिक का प्रतिनिधित्व समाप्त करेगा और दूसरा डॉट प्रॉपर्टी एक्सेसर है।
सीएमएस

2
यह प्रश्न जावास्क्रिप्ट के बारे में नहीं है यह जावास्क्रिप्ट के बारे में है।
लियाम

14

कृपया नीचे दिए गए उदाहरण देखें। यह आपके संदेह को स्पष्ट करने में मदद करेगा

Example                  Result

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

parseint फ़ंक्शन का उपयोग करके यह केवल पूर्णांक के ऑप को प्रस्तुत करेगा और स्ट्रिंग को नहीं


12

हम उपयोग +(stringOfNumber)करने के बजाय उपयोग कर सकते हैंparseInt(stringOfNumber)

Ex: +("21")21 की तरह रिटर्न देता है parseInt("21")

हम इस "" + "ऑपरेटर को पार्सिंग फ्लोट के लिए भी उपयोग कर सकते हैं ...


1
लेकिन आप इसका इस्तेमाल फ़ार्मुलों में नहीं कर सकते हैं! Ie (1 + ("21")) * 10 === 1210!
अलेक्जेंडर वसीलीव

2
@AlexanderVasilyev मुझे लगता है कि आप कर सकते हैं, क्या आप बस के आसपास एक अतिरिक्त कोष्ठक का उपयोग नहीं करेंगे +?
नीके न्यूमैन

@NiCkNewman मुझे प्राप्त उत्तर में उदाहरण (+ 21) से टिप्पणी करता है।
अलेक्जेंडर वासिलिवे

मैं वास्तव में इस समाधान को नापसंद करता हूं। यह स्पष्ट नहीं है जैसे parseIntहै। एक सामान्य कार्यान्वयन const myNumber = +myNumberAsAStringजो पहली नज़र में एक मानक +=या =+ऑपरेटर की तरह दिखता है । इसके अलावा यदि गलत तरीके से उपयोग किया जाता है तो यह समवर्ती त्रुटियों को जन्म दे सकता है। यह समाधान इस तथ्य पर आधारित है कि 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

स्ट्रिंग को इंट में बदलने के कई तरीकों के प्रदर्शन की तुलना करने के लिए यहां दो लिंक दिए गए हैं

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

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


1
@AlexanderYau, इस डॉक्टर के अनुसार , द्वारा '1'परिवर्तित किया जाएगा , तब होगा1ToNumber1 - 01
zangw

8

Google ने मुझे यह जवाब परिणाम के रूप में दिया, इसलिए ...

मुझे वास्तव में एक स्ट्रिंग को पूर्णांक के रूप में "सेव" करने की आवश्यकता थी, सी और जावास्क्रिप्ट के बीच एक बंधन के लिए, इसलिए मैं स्ट्रिंग को पूर्णांक में बदल देता हूं:

/*
    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-बाइट मान वापस मिल जाए।
सनकैट २२

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

एक और विकल्प XOR को अपने साथ दोगुना करना है:

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

इस तरह मुझे हमेशा एक इंट बैक मिलता है।


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 = (+ personAge)

फिर आप टाइपऑफ personAge नंबर देख सकते हैं

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