2016-09-13 31 views
7

JavaScript फ़ंक्शन parseInt एक पूर्णांक के लिए किसी दिए गए पैरामीटर के रूपांतरण के लिए मजबूर किया जा सकता है पर parseInt() का उपयोग कर, चाहे उस पैरामीटर एक स्ट्रिंग, नाव संख्या, संख्या, आदिटाइपप्रति: त्रुटि जब एक नंबर

है जावास्क्रिप्ट में parseInt(1.2) कोई त्रुटि के साथ 1 प्राप्त होते हैं, तथापि, टाइपप्रति में, यह एक त्रुटि संकलन के दौरान यह कहते हुए फेंकता है:

error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. 

मैं यहाँ कुछ कमी कर रहा हूँ या यह टाइपप्रति से एक अपेक्षित व्यवहार है?

+7

हां फिर टाइप चेकर है कि! –

+0

'parseInt ("" + 1.2 + "")' – Mojtaba

+0

'parseInt ([2, 3]) 'रिटर्न' 2'' का प्रयास करें, लेकिन इसका मतलब यह नहीं है कि आपको यह करना चाहिए ... –

उत्तर

11

parseInt का उपयोग इस आपरेशन करने के लिए न करें - Math.floor का उपयोग करें।

parseInt से floor का उपयोग करके एक संख्या हमेशा सही परिणाम नहीं दे रही है। parseInt(4e21)4 लौटाता है, 4e21 नहीं। parseInt(-0)0 लौटाता है, -0 नहीं। टाइपिंग में

+0

मुझे नहीं लगता कि यह है सही तरीका। यह एक फ्लोट नंबर का उत्पादन करेगा जिसमें कोई अंश भाग नहीं होगा। लेकिन यह वास्तव में एक पूर्णांक नहीं है। उदाहरण के लिए यदि आप इसे पूर्णांक द्वारा विभाजित करते हैं तो आप एक फ्लोट नंबर की अपेक्षा करेंगे। – cosmozhang

+0

प्रश्न 'स्ट्रिंग | के लिए पूछता है संख्या' 'Math.floor()' केवल 'संख्या' लेता है ताकि यह काम न करे। अन्य उत्तरों में से एक 'संख्या() 'का सुझाव देता है जो काम करता है लेकिन शायद आपको दशमलव स्थानों के साथ एक संख्या के साथ छोड़ देता है। 'Math.floor (संख्या (stringOrNumber))' एक समझदार विकल्प की तरह लगता है, लेकिन 'parseInt ("" + row.c, 10)' कुछ हद तक स्वीकार्य लगता है। – Forbesmyester

4

फ़ंक्शन parseInt वास्तव में string की पहली तर्क में अपेक्षा करता है। कृपया the documentation देखें। आमतौर पर आप दूसरे, radix तर्क को छोड़ सकते हैं और फिर यह 10 के डिफ़ॉल्ट पर वापस आ जाएगा। लेकिन सबसे सुरक्षित है कि संख्यात्मक सिस्टम बेस को दूसरे तर्क के रूप में हमेशा जोड़ना है (आमतौर पर 10)।

यदि आप चाहें तो करने के लिए number को डाली एक सामान्य मूल्य, तो आप इस तरह, Number फ़ंक्शन का उपयोग कर सकते हैं।

var myNumber = Number(myGeneralValue); 
2

देखो:

parseInt(string: string, radix?: number): number; 
        ^^^^^^ 

पहला तर्क एक स्ट्रिंग की जरूरत है। यही कारण है कि कल्पना के साथ कतार में है:

parseInt (string , radix)
parseInt समारोह निर्दिष्ट मूलांक के अनुसार स्ट्रिंग तर्क की सामग्री की व्याख्या से निर्धारित एक पूर्णांक मूल्य पैदा करता है।

सामान्य जे एस में, पहले तर्क एक स्ट्रिंग के लिए मजबूर किया जाता है, कल्पना में निम्नलिखित नियम के आधार पर:

  1. inputString ToString हो (स्ट्रिंग) करते हैं।

यही वजह है कि parseInt(1.2) काम करता है।

ध्यान दें कि कल्पना मूलांक की अनुमति देता है undefined है, जो यह हस्ताक्षर के radix?: number भाग में छोड़ते हुए, इसलिए प्रश्न चिह्न के रूप में ही है किया जाना है।इस मामले में, ज़ाहिर है, यह 10 तक डिफ़ॉल्ट है (जब तक स्ट्रिंग 0xabc की तरह दिखती है)।

जैसा कि अन्य उत्तरों में बताया गया है, parseInt यदि आप वास्तव में करना चाहते हैं तो एक फर्श या छंटनी ऑपरेशन है तो सबसे अच्छा समाधान नहीं है।

2

आप इस मामले में parseInt का उपयोग क्यों करेंगे? बस Math.floor या Math.ceil का उपयोग करें। parseInt एक स्ट्रिंग को एक तर्क के रूप में उम्मीद करता है और संख्या नहीं। इसलिए आपकी त्रुटि

1

'Math.floor' और 'parseInt' के बीच नकारात्मक संख्याएं होने पर अलग-अलग अभिव्यक्तियां होती हैं।

आपको इसका उपयोग करना चाहिए: 1.2 | 0

या (1.2) .toFixed (0)

संबंधित मुद्दे