javascript কেন parseInt(1/0, 19) 18 ফিরে?




(4)

আমি জাভাস্ক্রিপ্ট একটি বিরক্তিকর সমস্যা আছে।

> parseInt(1 / 0, 19)
> 18

কেন parseInt ফিরে 18 ?


উপরের উত্তর যোগ করতে

parseInt(1/0,19) parseInt("Infinity",19) সমান parseInt("Infinity",19)

ভিতর 19 নম্বর 0-9 এবং AI (or ai) একটি বৈধ সংখ্যা। সুতরাং, "ইনফিনিটি" থেকে এটি I 19 এর ভিত্তি নেয় এবং মূল 10 তে রূপান্তরিত হয় যা 18 হয়ে যায়। এরপর এটি পরবর্তী অক্ষরটি অর্থাৎ n নেওয়ার চেষ্টা করে যা 19 ভিত্তিক নয়, তাই পরবর্তী অক্ষরগুলি বাতিল করে দেয় (জাভাস্ক্রিপ্টের স্ট্রিং রূপান্তর করার আচরণ অনুসারে সংখ্যা)

সুতরাং, যদি আপনি parseInt("Infinity",19) বা parseInt("I",19) বা parseInt("i",19) লিখেন তবে ফলাফলটি একইরকম হবে 18

এখন, যদি আপনি 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

1/0 এর ফলাফল Infinity

parseInt তার প্রথম যুক্তিটি স্ট্রিং হিসাবে আচরণ করে যার অর্থ প্রথম Infinity.toString() কে বলা হয়, স্ট্রিং "Infinity" । তাই এটি যদি আপনি 19 টি বেসামরিক ভিত্তিতে "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" স্ক্যান করে যা এটির কোন অংশটিকে পার্স করা যেতে পারে এবং প্রথমটি গ্রহণ করার পরে স্টপ করতে পারে (কারণ n বেস 19 তে একটি বৈধ সংখ্যা নয়)।

অতএব এটি যেমন আপনি parseInt("I", 19) নামে আচরণ করেন, যা উপরের টেবিলের দ্বারা দশমিক 18 রূপে পরিবর্তিত হয়।


এখানে ঘটনা ক্রম:

  • 1/0 Infinity মূল্যায়ন
  • parseInt Infinity পড়তে এবং আনন্দের সাথে I 19 বেস 19 হয় যে নোট
  • parseInt স্ট্রিংটির অবশিষ্ট অংশ উপেক্ষা করে, যেহেতু এটি রূপান্তর করা যাবে না।

উল্লেখ্য যে আপনি যে কোনও বেসের জন্য ফলাফল পাবেন >= 19 , কিন্তু নীচের ঘাঁটিগুলির জন্য নয়। ঘাঁটির জন্য >= 24 , আপনি একটি বৃহত্তর ফলাফল পাবেন, কারণ n সেই সময়ে একটি বৈধ সংখ্যা হয়ে ওঠে।


উপরের উত্তর যোগ করার জন্য:

parseInt সংখ্যা মধ্যে স্ট্রিং বিশ্লেষণ করা হয় (সুতা নামের মধ্যে হয়)। আপনার অবস্থানে, আপনি কোনও প্যারিসিং করতে চান না যেহেতু 1/0 ইতিমধ্যেই একটি সংখ্যা, তাই এটি ফাংশনের একটি অদ্ভুত পছন্দ। যদি আপনার একটি সংখ্যা থাকে (যা আপনি করেন) এবং এটি একটি নির্দিষ্ট বেস রূপান্তর করতে চান, তবে আপনি পরিবর্তে একটি রডিক্সের সাথে স্ট্রিং ব্যবহার করতে হবে।

var num = 1 / 0;
var numInBase19 = num.toString(19); // returns the string "Infinity"






parseint