javascript - ParseInt क्यों(1/0, 1 9) 18 लौटाता है?
(3)
उपरोक्त उत्तरों में जोड़ने के लिए
parseInt(1/0,19)
parseInt("Infinity",19)
बराबर है parseInt("Infinity",19)
आधार 1 9 0-9
- AI
और AI
(or ai)
भीतर वैध संख्याएं हैं। तो, "इन्फिनिटी" से I
आधार 1 का लगता है और आधार 10 में परिवर्तित हो जाता है जो 18 हो जाता है, फिर यह अगले चरित्र को लेने की कोशिश करता है यानी जो कि आधार 1 में मौजूद नहीं है, इसलिए अगले पात्रों को छोड़ दें (जावास्क्रिप्ट के स्ट्रिंग को परिवर्तित करने के व्यवहार के अनुसार संख्या में)
इसलिए, यदि आप parseInt("Infinity",19)
लिखते हैं parseInt("Infinity",19)
या parseInt("I",19)
या parseInt("i",19)
परिणाम वही होगा यानी 18
।
अब, यदि आप parseInt("I0",19)
लिखते हैं parseInt("I0",19)
परिणाम 342
होगा IX 19 (the base)^1 + 0 X 19^0
= 18 X 19^1 + 0 X 19^0
= 18 X 19 + 0 X 1
= 342
इसी तरह, parseInt("I11",19)
परिणामस्वरूप 6518
अर्थात
18 X 19^2 + 1 X 19^1 + 1 X 19^0
= 18 X 19^2 + 1 X 19^1 + 1 X 19^0
= 18 X 361 + 1 X 19 + 1 X 1
= 6498 + 19 + 1
= 6518
मुझे जावास्क्रिप्ट में एक परेशानी की समस्या है।
> parseInt(1 / 0, 19)
> 18
parseInt
18
क्यों वापस आती है?
उपरोक्त उत्तरों में जोड़ने के लिए:
parseInt तारों को संख्याओं में पार्स करने का इरादा है (सुराग नाम में है)। आपकी स्थिति में, आप किसी भी पार्सिंग को नहीं करना चाहते हैं क्योंकि 1/0 पहले से ही एक संख्या है, इसलिए यह फ़ंक्शन का अजीब विकल्प है। यदि आपके पास कोई संख्या है (जो आप करते हैं) और इसे किसी विशेष आधार पर रूपांतरित करना चाहते हैं, तो आपको इसके बजाय एक रेडिक्स के साथ स्ट्रिंग का उपयोग करना चाहिए।
var num = 1 / 0;
var numInBase19 = num.toString(19); // returns the string "Infinity"
1/0
का नतीजा Infinity
।
parseInt
एक स्ट्रिंग के रूप में अपना पहला तर्क मानता है जिसका अर्थ है कि Infinity.toString()
को सबसे पहले स्ट्रिंग "Infinity"
उत्पादन किया जाता है। तो यह वैसे ही काम करता है जैसे आपने इसे "Infinity"
को आधार 19 में दशमलव में बदलने के लिए कहा था।
आधार दशमलव में उनके दशमलव मानों के साथ अंक यहां दिए गए हैं:
Base 19 Base 10 (decimal)
---------------------------
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
a 10
b 11
c 12
d 13
e 14
f 15
g 16
h 17
i 18
आगे क्या होता है कि parseInt
इनपुट को "Infinity"
स्कैन करता है यह पता लगाने के लिए कि इसका कौन सा हिस्सा पार्स किया जा सकता है और पहले I
को स्वीकार करने के बाद बंद हो जाता है (क्योंकि n
1 9 में वैध अंक नहीं है)।
इसलिए यह व्यवहार करता है जैसे कि आपने parseInt("I", 19)
, जो उपरोक्त तालिका द्वारा दशमलव 18 में परिवर्तित हो जाता है।