আমি পড়া করছি এই কিন্তু আমি কি লেখা আছে দ্বারা বিভ্রান্ত করছি একটি র্যাডিক্স আর্গুমেন্ট সহ parseInt অধ্যায়
কেন এটি parseInt(8, 3)
→ NaN
এবং parseInt(16, 3)
→ 1
?
আফাইক 8 এবং 16 বেস -3 নম্বর নয়, সুতরাং খুব parseInt(16, 3)
ফিরে আসা উচিতNaN
আমি পড়া করছি এই কিন্তু আমি কি লেখা আছে দ্বারা বিভ্রান্ত করছি একটি র্যাডিক্স আর্গুমেন্ট সহ parseInt অধ্যায়
কেন এটি parseInt(8, 3)
→ NaN
এবং parseInt(16, 3)
→ 1
?
আফাইক 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
।
যেহেতু এই প্রশ্নটি খুব বেশি মনোযোগ পাচ্ছে এবং অনুসন্ধান ফলাফলগুলিতে উচ্চতর স্থান পেতে পারে, তাই জাভা স্ক্রিপ্টে স্ট্রিংগুলিকে সংখ্যায় রূপান্তর করার জন্য তাদের বিভিন্ন আইডিয়াসিন্যাস এবং অ্যাপ্লিকেশন (এসও-তে আমার অন্য উত্তর থেকে তুলে নেওয়া হয়েছে) এর বিকল্পগুলির একটি গতিবিধি এখানে রয়েছে:
parseInt(str[, radix])
- শেষে অতিরিক্ত অক্ষর উপেক্ষা করে স্ট্রিংটির শুরুতে যতটা পূর্ণ (পূর্ণসংখ্যা) সংখ্যায় রূপান্তর করতে পারে তেমন রূপান্তর করে। তাই parseInt("10x")
হয় 10
; x
উপেক্ষা করা হয়। , একটি ঐচ্ছিক র্যাডিক্স (নম্বর বেস) যুক্তি সমর্থন করে, যাতে parseInt("15", 16)
হয় 21
( 15
হেক্স মধ্যে)। যদি কোনও রেডিক্স না থাকে তবে দশমিকটি ধরে নেওয়া হয় যদি না স্ট্রিংটি 0x
(বা 0X
) দিয়ে শুরু হয় তবে এই ক্ষেত্রে এটি সেগুলি এড়িয়ে যায় এবং হেক্স অনুমান করে। (কিছু ব্রাউজার দিয়ে শুরু আচরণ স্ট্রিং ব্যবহার করা 0
অকট্যাল হিসেবে; যে আচরণ নিদিষ্ট কখনো হয়েছিলেন বিশেষভাবে অননুমোদিত ES5 নির্দেশের মধ্যে।) রিটার্নস NaN
কোন parseable ডিজিটের পাওয়া যায়।
parseFloat(str)
- পছন্দ করুন parseInt
তবে ভাসমান-পয়েন্ট সংখ্যাগুলি করে এবং কেবলমাত্র দশমিক সমর্থন করে। আবার স্ট্রিং উপর অতিরিক্ত অক্ষর উপেক্ষা করা হয়, তাই parseFloat("10.5x")
হল 10.5
( x
উপেক্ষা করা হয়)। শুধুমাত্র দশমিক হিসেবে সমর্থিত, parseFloat("0x15")
হয় 0
(এ সমাপ্ত পার্স কারণ x
)। রিটার্নস NaN
কোন parseable ডিজিটের পাওয়া যায়।
আনরি +
, উদাহরণস্বরূপ +str
- (উদাহরণস্বরূপ, অন্তর্নিহিত রূপান্তর) ভাসমান পয়েন্ট এবং জাভাস্ক্রিপ্টের স্ট্যান্ডার্ড নম্বর স্বরলিপি ব্যবহার করে পুরো স্ট্রিংকে একটি সংখ্যায় রূপান্তরিত করে (কেবলমাত্র অঙ্ক এবং একটি দশমিক পয়েন্ট = দশমিক; 0x
প্রিফিক্স = হেক্স; 0o
উপসর্গ = অক্টাল [ইএস ২০১৫ +]; কিছু বাস্তবায়ন এটিকে প্রসারিত করে নেতৃস্থানীয়কে 0
অক্টাল হিসাবে আচরণ করার জন্য , তবে কড়া মোডে নয়)। +"10x"
হয় NaN
কারণ x
হয় না উপেক্ষা করেছেন। +"10"
হয় 10
, +"10.5"
হয় 10.5
, +"0x15"
হয় 21
, +"0o10"
হয় 8
[ES2015 + +]। একটি gotcha হয় আছে: +""
হয় 0
না NaN
হিসাবে আপনি আশা করতে পারেন।
Number(str)
- হুবহু অন্তর্নিহিত রূপান্তরটির মতো (উদাহরণস্বরূপ, +
উপরের একেরীর মতো ) তবে কিছু বাস্তবায়নে ধীর। (এটি সম্ভবত ব্যাপার হওয়ার সম্ভাবনা নয়))
parseInt
প্রথম toString
যুক্তিতে প্রথম ব্যবহার হয়? এটা বোঝা যাবে।
parseInt
অ্যালগরিদমের প্রথম পদক্ষেপ : ইকমা
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