जवाबों:
देशी 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)
'4'>>0
और '4'>>>0
।
parseInt
और parseFloat
खुशी से पत्र स्वीकार करते हैं। केवल निरंतर Number
लौटता है NaN
।
NaN
प्रत्येक मूल्य के लिए जो बिल्कुल पूर्णांक नहीं है। इसलिए इन में से कोई भी काम नहीं करता Number('2.2')
है 2
और Number('')
0.23 के लिए
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
parseInt('0asdf', 10)
उत्पादन करता है 0
।
जावास्क्रिप्ट में एक स्ट्रिंग को संख्या में बदलने के दो मुख्य तरीके हैं। एक तरीका यह है कि इसे पार्स किया जाए और दूसरा तरीका यह है कि इसके प्रकार को संख्या में बदल दिया जाए। अन्य उत्तरों में सभी तरकीबें (जैसे यूनीरी प्लस) में स्ट्रिंग के प्रकार को एक संख्या में सम्मिलित करना शामिल है। आप नंबर फ़ंक्शन के साथ भी स्पष्ट रूप से एक ही काम कर सकते हैं।
पदच्छेद
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
यह 200
NaN के बजाय है। इसके अलावा, संख्या "इन्फिनिटी" को समझती है, जबकि पार्स तरीके नहीं हैं।
रिवाज
यह संभव नहीं है कि इनमें से कोई भी तरीका ठीक वैसा ही हो जैसा आप चाहते हैं। उदाहरण के लिए, आमतौर पर मैं एक त्रुटि चाहता हूं कि यदि पार्सिंग विफल हो जाती है, और मुझे इन्फिनिटी, घातांक या अग्रणी व्हाट्सएप के लिए समर्थन की आवश्यकता नहीं है। अपने usecase के आधार पर, कभी-कभी यह कस्टम रूपांतरण फ़ंक्शन लिखने के लिए समझ में आता है।
हमेशा जांच लें कि नंबर या पार्स तरीकों में से एक आउटपुट आपकी अपेक्षित संख्या का प्रकार है। आप लगभग निश्चित रूप isNaN
से यह सुनिश्चित करने के लिए उपयोग करना चाहेंगे कि संख्या NaN नहीं है (आमतौर पर एकमात्र तरीका है जिससे आपको पता चलता है कि पार्स विफल हुआ)।
97,8,00
और समान हो या न हो। एक सरल ट्रिक यह है कि आप .replace(/[^0-9]/g, "")
अपने स्ट्रिंग से सभी गैर अंकों को हटा दें और उसके बाद रूपांतरण करें। यह निश्चित रूप से पागल स्ट्रिंग्स के सभी प्रकार की अनदेखी करेगा जो आपको शायद सिर्फ पार्स करने के बजाय त्रुटि करना चाहिए ...
.replace(/[^0-9.]/g, "")
, अन्यथा "1.05" "105" बन जाएगा।
var fixed = Number("97.654").toFixed(0); // rounded rather than truncated
, हम एक हो रही है string
(की वजह से .toFixed
विधि) एक के बजाय number
(पूर्णांक)। अगर हम चाहते हैं कि पूर्णांक पूर्णांक का उपयोग करना बेहतर हो तो संभव हैMath.round("97.654");
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%)। मैं चित्र और परीक्षण से ऊपर अद्यतन करता हूं
हालांकि एक पुराना सवाल है, लेकिन शायद यह किसी के लिए मददगार हो सकता है।
मैं स्ट्रिंग को int संख्या में परिवर्तित करने के इस तरीके का उपयोग करता हूं
var str = "25"; // string
var number = str*1; // number
इसलिए, जब 1 से गुणा करते हैं, तो मान नहीं बदलता है, लेकिन जेएस स्वचालित रूप से एक नंबर लौटाता है।
लेकिन जैसा कि नीचे दिखाया गया है, इसका उपयोग तब किया जाना चाहिए जब आप सुनिश्चित हों कि str
एक संख्या है (या एक संख्या के रूप में प्रतिनिधित्व किया जा सकता है), अन्यथा यह NaN लौटाएगा - संख्या नहीं।
आप उपयोग करने के लिए सरल कार्य बना सकते हैं, जैसे
function toNumber(str) {
return str*1;
}
ParseInt का प्रयास करें।
var number = parseInt("10", 10); //number will have value of 10.
मैंने यहाँ गलत उत्तर पोस्ट किया, क्षमा करें। तय की।
यह एक पुराना सवाल है, लेकिन मुझे यह चाल पसंद है:
~~"2.123"; //2
~~"5"; //5
दशमलव बिंदु के बाद डबल बिटवाइज़ निगेटिव कुछ भी छोड़ देता है और इसे एक नंबर फॉर्मेट में बदल देता है। मुझे बताया गया है कि यह कॉलिंग फ़ंक्शंस और व्हाट्सएप से थोड़ा तेज़ है, लेकिन मैं पूरी तरह से आश्वस्त नहीं हूं।
संपादित करें: एक और तरीका जो मैंने अभी यहां देखा (जावास्क्रिप्ट के बारे में एक प्रश्न >>> ऑपरेटर, जो कि एक शून्य-भरण दाईं पारी है), जो दर्शाता है कि इस संचालक के साथ किसी संख्या को 0 से स्थानांतरित करना एक संख्या को uint32 में रूपांतरित करता है जो कि अच्छा है यदि आप यह भी अहस्ताक्षरित चाहते हैं । फिर से, यह एक अहस्ताक्षरित पूर्णांक में परिवर्तित हो जाता है , जिससे यदि आप हस्ताक्षरित संख्या का उपयोग करते हैं तो अजीब व्यवहार हो सकता है।
"-2.123" >>> 0; // 4294967294
"2.123" >>> 0; // 2
"-5" >>> 0; // 4294967291
"5" >>> 0; // 5
यदि आप वैज्ञानिक संकेतन में फ्लोट को परिवर्तित करने के लिए parseInt का उपयोग करते हैं तो सावधान रहें! उदाहरण के लिए:
parseInt("5.6e-14")
में परिणाम होगा
5
के बजाय
0
parseInt
एक नाव के लिए सही काम नहीं करेगा। parseFloat
इस मामले में ठीक से काम करता है।
स्ट्रिंग को इंटेगर में बदलने के लिए, मैं 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 का उपयोग करें यदि और केवल यदि आप सुनिश्चित हैं कि आप पूर्णांक मूल्य चाहते हैं।
साइड नोट के रूप में भी: Mootools में फ़ंक्शन है toInt () जो किसी भी मूल स्ट्रिंग (या फ्लोट (या पूर्णांक)) पर उपयोग किया जाता है।
"2".toInt() // 2
"2px".toInt() // 2
2.toInt() // 2
SyntaxError
, आपको एक डबल डॉट का उपयोग करना चाहिए, उदाहरण के लिए: 2..toInt();
पहला डॉट एक Number
शाब्दिक का प्रतिनिधित्व समाप्त करेगा और दूसरा डॉट प्रॉपर्टी एक्सेसर है।
हम उपयोग +(stringOfNumber)
करने के बजाय उपयोग कर सकते हैंparseInt(stringOfNumber)
Ex: +("21")
21 की तरह रिटर्न देता है parseInt("21")
।
हम इस "" + "ऑपरेटर को पार्सिंग फ्लोट के लिए भी उपयोग कर सकते हैं ...
+
?
parseInt
है। एक सामान्य कार्यान्वयन const myNumber = +myNumberAsAString
जो पहली नज़र में एक मानक +=
या =+
ऑपरेटर की तरह दिखता है । इसके अलावा यदि गलत तरीके से उपयोग किया जाता है तो यह समवर्ती त्रुटियों को जन्म दे सकता है। यह समाधान इस तथ्य पर आधारित है कि 0 को बाएं हाथ की ओर माना जाता है जब कोई संख्या प्रदान नहीं की जाती है।
स्ट्रिंग को संख्या मान में बदलने के लिए जावास्क्रिप्ट में कई तरीके हैं ... सभी सरल और आसान, वह तरीका चुनें जो आपके लिए काम करता है:
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
मेरा पसंदीदा तरीका +
साइन का उपयोग करना है , जो कि स्ट्रिंग को जावास्क्रिप्ट में संख्या में बदलने का सबसे सुंदर तरीका है।
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
स्ट्रिंग को इंट में बदलने के कई तरीकों के प्रदर्शन की तुलना करने के लिए यहां दो लिंक दिए गए हैं
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;
}
int2str
फ़ंक्शन बंद हो जाता है यदि एक बाइट 0 है, जो मूल्य के भीतर एक वैध तत्व हो सकता है, इसलिए if
... break
को हटा दिया जाना चाहिए ताकि आपको पूर्ण 4-बाइट मान वापस मिल जाए।
मेरी राय में, कोई भी जवाब सभी किनारे के मामलों को शामिल नहीं करता है क्योंकि फ्लोट को पार्स करने के परिणामस्वरूप त्रुटि हो सकती है।
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
parseInteger
नहीं है parseNumber
। मुझे लगता है कि हर समाधान एक समाधान है क्योंकि जेएस पूर्णांकों का समर्थन नहीं करता है और विभिन्न प्रकारों के रूप में तैरता है। हम null
इसके बजाय वापस आ सकते हैं NaN
, यदि नहीं नंबर एक भ्रामक है।
यहां सबसे आसान उपाय है
let myNumber = "123" | 0;
अधिक आसान उपाय
let myNumber = +"123";
उपर्युक्त सभी सही हैं। कृपया पहले यह सुनिश्चित कर लें कि यह स्ट्रिंग में एक नंबर है "टाइपॉट x === 'नंबर'"
var num = "fsdfsdf242342";
typeof num => 'string';
var num1 = "12423";
typeof num1 => 'number';
+num1 = > 12423`
var num1 = "12423"; typeof num1;
रिटर्न string
।
मैंने केवल एक प्लस (+) स्ट्रिंग से पहले जोड़ा और वह समाधान था!
+"052254" //52254
आशा है ये मदद करेगा ;)
दस की अपनी संबंधित शक्ति के साथ अंकों का गुणन:
अर्थात: 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;
}
function doSth(){
var a = document.getElementById('input').value;
document.getElementById('number').innerHTML = toNumber(a) + 1;
}
function toNumber(str){
return +str;
}
<input id="input" type="text">
<input onclick="doSth()" type="submit">
<span id="number"></span>
एक वैध पूर्णांक प्राप्त करने के लिए सबसे सुरक्षित तरीका:
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
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);
}
आप प्लस का उपयोग कर सकते हैं, उदाहरण के लिए =>
var personAge = '24'; var personAge1 = (+ personAge)
फिर आप टाइपऑफ personAge नंबर देख सकते हैं