জাভাস্ক্রিপ্টে আমার বিরক্তিকর সমস্যা আছে ।
> parseInt(1 / 0, 19)
> 18
কেন parseInt
ফাংশন ফিরে আসে 18
?
জাভাস্ক্রিপ্টে আমার বিরক্তিকর সমস্যা আছে ।
> parseInt(1 / 0, 19)
> 18
কেন parseInt
ফাংশন ফিরে আসে 18
?
উত্তর:
ফলাফল 1/0
হয় Infinity
।
parseInt
তার প্রথম যুক্তিকে স্ট্রিং হিসাবে বিবেচনা করে যার অর্থ প্রথমে Infinity.toString()
বলা হয় স্ট্রিং উত্পাদন করে "Infinity"
। সুতরাং এটি একইরূপে কাজ করে যদি আপনি এটিকে "Infinity"
19 বেসকে দশমিক হিসাবে রূপান্তর করতে বলেছিলেন ।
দশমিক মানগুলির সাথে বেস 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
19 ভিত্তিতে কোনও বৈধ অঙ্ক নয়)।
সুতরাং এটি এমনভাবে আচরণ করে যেমন আপনি কল করেছেন parseInt("I", 19)
, যা উপরের টেবিলের মাধ্যমে দশমিক 18 এ রূপান্তরিত হয়েছে।
parseInt('Infini',24)
।
n
একটি বৈধ সংখ্যা, সুতরাং এটি আসলে শেষ হয় parseInt("Infini", 24)
।
এখানে ইভেন্টগুলির ক্রমটি রয়েছে:
1/0
মূল্যায়ন Infinity
parseInt
সার্চ Infinity
এবং সুখে নোট যে I
বেস 19 18 হয়parseInt
স্ট্রিংয়ের অবশিষ্ট অংশগুলি উপেক্ষা করে, কারণ এটি রূপান্তর করা যায় না।মনে রাখবেন যে আপনি কোনও বেসের জন্য ফলাফল পেতে চাইছেন >= 19
তবে তার নীচের বেসগুলির জন্য নয়। বেসগুলির জন্য >= 24
, আপনি একটি বৃহত্তর ফলাফল পাবেন, কারণ n
সেই সময়ে এটি একটি বৈধ সংখ্যা হয়ে উঠবে।
parseInt
গ্রহণ করবে 36, যেহেতু ইংরেজি বর্ণমালায় 26 টি অক্ষর রয়েছে এবং কনভেনশনটি প্রদত্ত বেসটিতে বৈধ সংখ্যাগুলির সেট হিসাবে অক্ষরগুলি পরে অক্ষরগুলি ব্যবহার করে।
Infinity
থেকে "Infinity"
...
উপরের উত্তর যুক্ত করতে:
পার্সিয়ান্টটি স্ট্রিংগুলিকে সংখ্যায় বিভক্ত করার উদ্দেশ্যে তৈরি করা হয়েছে (ক্লুটি নামটিতে রয়েছে)। আপনার পরিস্থিতিতে, আপনি 1/0 থেকে ইতিমধ্যে কোনও পার্সিং করতে চান না কারণ এটি ইতিমধ্যে একটি সংখ্যা, তাই এটি ফাংশনের অদ্ভুত পছন্দ। আপনার যদি একটি নম্বর থাকে (যা আপনি করেন) এবং এটি একটি নির্দিষ্ট বেসে রূপান্তর করতে চান, আপনার পরিবর্তে একটি স্ট্রিকের সাথে টসস্ট্রিং ব্যবহার করা উচিত ।
var num = 1 / 0;
var numInBase19 = num.toString(19); // returns the string "Infinity"
উপরের উত্তর যুক্ত করতে
parseInt(1/0,19)
সমতুল্য parseInt("Infinity",19)
বেস 19 সংখ্যার মধ্যে 0-9
এবং A-I
(or a-i)
একটি বৈধ সংখ্যা। সুতরাং, "ইনফিনিটি" থেকে এটি I
বেস 19 গ্রহণ করে এবং বেস 10 এ রূপান্তরিত হয় যা 18 হয়ে যায় তারপরে এটি পরবর্তী অক্ষরটি গ্রহণ করার চেষ্টা করে n
যা বেস 19 তে উপস্থিত নয় তাই পরবর্তী অক্ষরগুলি বাতিল করে দেয় (জাভাস্ক্রিপ্টের স্ট্রিংকে সংখ্যায় রূপান্তর করার আচরণ অনুসারে )
সুতরাং, যদি আপনি লিখতে parseInt("Infinity",19)
বা parseInt("I",19)
বা parseInt("i",19)
ফল একই অর্থাত হতে হবে 18
।
এখন, আপনি লিখলে parseInt("I0",19)
ফলাফলটি = = = 342
হিসাবে হবেI X 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
if
সাহায্য করতে পারে।