मैं पढ़ रहा हूँ इस लेकिन मैं क्या में लिखा है से उलझन में हूँ एक मूलांक तर्क के साथ parseInt अध्याय
ऐसा क्यों है कि parseInt(8, 3)→ NaNऔर parseInt(16, 3)→ 1?
AFAIK 8 और 16 बेस -3 नंबर नहीं हैं, इसलिए parseInt(16, 3)वापस NaNभी आना चाहिए
मैं पढ़ रहा हूँ इस लेकिन मैं क्या में लिखा है से उलझन में हूँ एक मूलांक तर्क के साथ parseInt अध्याय
ऐसा क्यों है कि parseInt(8, 3)→ NaNऔर parseInt(16, 3)→ 1?
AFAIK 8 और 16 बेस -3 नंबर नहीं हैं, इसलिए parseInt(16, 3)वापस NaNभी आना चाहिए
जवाबों:
यह कुछ लोग हैं जो हर समय यात्रा करते हैं, तब भी जब वे इसके बारे में जानते हैं। :-) आप इसे उसी कारण से देख रहे हैं जो parseInt("1abc")1: parseIntपहले अमान्य वर्ण पर रुकता है और उस बिंदु पर जो कुछ भी है उसे वापस करता है। यदि पार्स करने के लिए कोई मान्य वर्ण नहीं हैं, तो यह वापस आ जाता है NaN।
parseInt(8, 3)" "8"बेस 3 में पार्स" का अर्थ है (ध्यान दें कि यह संख्या 8को एक स्ट्रिंग में बदल देता है ; कल्पना में विवरण )। लेकिन आधार 3 में, एकल अंकों की संख्या बस कर रहे हैं 0, 1और 2। यह "9"अष्टक में पार्स करने के लिए कहने जैसा है । चूँकि कोई मान्य वर्ण नहीं था, इसलिए आपको मिला NaN।
parseInt(16, 3)इसे "16"आधार में पार्स करने के लिए कह रहा है 3. चूंकि यह पार्स कर सकता है 1, यह करता है, और फिर इसे रोक देता है 6क्योंकि यह इसे पार्स नहीं कर सकता है। तो लौट आता है 1।
चूँकि इस प्रश्न पर बहुत अधिक ध्यान दिया जा रहा है और खोज परिणामों में अत्यधिक रैंक हो सकता है, यहाँ जावास्क्रिप्ट में संख्याओं के लिए स्ट्रिंग बदलने के लिए विकल्पों का एक समूह है, अपने विभिन्न आइडिओसिंकरेसीज़ और अनुप्रयोगों के साथ (SO पर यहाँ मेरा एक और उत्तर से उठा):
parseInt(str[, radix])- स्ट्रिंग की शुरुआत के रूप में ज्यादा के रूप में यह अंत में अतिरिक्त वर्णों की अनदेखी, एक पूर्ण (पूर्णांक) संख्या में बदल सकते हैं। तो parseInt("10x")है 10; xनजरअंदाज कर दिया है। , एक वैकल्पिक मूलांक (संख्या आधार) तर्क का समर्थन करता है तो parseInt("15", 16)है 21( 15हेक्स में)। यदि कोई मूलांक नहीं है, तो दशमलव को मानता है जब तक कि स्ट्रिंग 0x(या 0X) के साथ शुरू नहीं होती है , उस स्थिति में यह उन लोगों को छोड़ देता है और हेक्स मान लेता है। (कुछ ब्राउज़रों ने 0अष्टक के रूप में शुरू होने वाले तार का इलाज किया ; वह व्यवहार कभी भी निर्दिष्ट नहीं किया गया था, औरNaN ES5 विनिर्देश में विशेष रूप से अस्वीकृत हो गया था ।) कोई भी पारगम्य अंक नहीं मिलने पर वापस लौटता है।
parseFloat(str)- जैसे parseInt, लेकिन फ़्लोटिंग-पॉइंट नंबर और केवल दशमलव का समर्थन करता है। फिर स्ट्रिंग पर अतिरिक्त वर्ण अनदेखी कर रहे हैं, इसलिए parseFloat("10.5x")है 10.5( xनजरअंदाज कर दिया है)। केवल दशमलव के रूप में समर्थित है, parseFloat("0x15")है 0(कम से समाप्त होता है को पार्स क्योंकि x)। NaNयदि कोई पार्स करने योग्य अंक नहीं मिलते हैं, तो लौटाता है।
Unary +, उदा +str- (जैसे, निहित रूपांतरण) पूरे स्ट्रिंग को फ़्लोटिंग पॉइंट और जावास्क्रिप्ट के मानक संख्या अंकन (सिर्फ अंक और एक दशमलव बिंदु = दशमलव; 0xउपसर्ग = हेक्स; 0oउपसर्ग = ओक्टल [ES2015 +] का उपयोग करके एक संख्या में परिवर्तित करता है ; कुछ कार्यान्वयन इसे विस्तारित करते हैं ; 0अष्टक के रूप में एक अग्रणी का इलाज करने के लिए , लेकिन सख्त मोड में नहीं)। +"10x"है NaNक्योंकि xहै नहीं नजरअंदाज कर दिया। +"10"है 10, +"10.5"है 10.5, +"0x15"है 21, +"0o10"है 8[ES2015 +]। एक पकड़ है: +""जैसा कि आप उम्मीद 0नहीं NaNकर सकते हैं।
Number(str)- बिल्कुल अंतर्निहित रूपांतरण (जैसे, +ऊपर की एकता की तरह ), लेकिन कुछ कार्यान्वयन पर धीमा। (ऐसा नहीं है कि यह मामला होने की संभावना है।)
parseIntपहले toStringतर्क पर पहले उपयोग करता है? यह समझ में आता है।
parseIntएल्गोरिथम का पहला चरण है : ecma-international.org/ecma-262/7.0/…
123e-2है कि 1यह 1.23पहली बार में बदल जाता है और तब दशमलव बिंदु पर रुक जाता है?
NumberFormatExceptionहर बार देगा।
parseInt(स्ट्रिंग के लिए पहला तर्क जोर देना) समझ में आता है। के प्रयोजन parseIntहै पार्स एक पूर्ण संख्या के लिए एक स्ट्रिंग। इसलिए यदि आप इसे कुछ ऐसा देते हैं जो एक स्ट्रिंग नहीं है, तो स्ट्रिंग प्रतिनिधित्व प्राप्त करना समझ में आता है। इसके बाद जो करता है वह एक पूरी 'नॉट स्टोरी' है ...
उसी कारण से
>> parseInt('1foobar',3)
<- 1
में दस्तावेज़ , parseIntएक स्ट्रिंग लेता है। तथा
यदि स्ट्रिंग एक स्ट्रिंग नहीं है, तो इसे स्ट्रिंग में बदल दिया जाता है
तो 16, 8या '1foobar'पहले स्ट्रिंग में परिवर्तित किया जाता है।
फिर
यदि
parseIntएक ऐसे चरित्र से सामना होता है जो निर्दिष्ट मूलांक में एक अंक नहीं है, तो वह इसे और सभी सफल पात्रों को अनदेखा करता है
मतलब यह जहां तक हो सके वहां तक पहुंचाता है। 6, 8, और foobarध्यान नहीं दिया जाता है, और केवल क्या से पहले बदल जाती है है। अगर कुछ नहीं है, NaNतो लौटा दिया जाता है।
/***** Radix 3: Allowed numbers are [0,1,2] ********/
parseInt(4, 3); // NaN - We can't represent 4 using radix 3 [allowed - 0,1,2]
parseInt(3, 3); // NaN - We can't represent 3 using radix 3 [allowed - 0,1,2]
parseInt(2, 3); // 2 - yes we can !
parseInt(8, 3); // NaN - We can't represent 8 using radix 3 [allowed - 0,1,2]
parseInt(16, 3); // 1
//'16' => '1' (6 ignored because it not in [0,1,2])
/***** Radix 16: Allowed numbers/characters are [0-9,A-F] *****/
parseInt('FOX9', 16); // 15
//'FOX9' => 'F' => 15 (decimal value of 'F')
// all characters from 'O' to end will be ignored once it encounters the out of range'O'
// 'O' it is NOT in [0-9,A-F]
कुछ और उदाहरण:
parseInt('45', 13); // 57
// both 4 and 5 are allowed in Radix is 13 [0-9,A-C]
parseInt('1011', 2); // 11 (decimal NOT binary)
parseInt(7,8); // 7
// '7' => 7 in radix 8 [0 - 7]
parseInt(786,8); // 7
// '78' => '7' => 7 (8 & next any numbers are ignored bcos 8 is NOT in [0-7])
parseInt(76,8); // 62
// Both 7 & 6 are allowed '76' base 8 decimal conversion is 62 base 10