मैं पढ़ रहा हूँ इस लेकिन मैं क्या में लिखा है से उलझन में हूँ एक मूलांक तर्क के साथ 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