javascript - convert - parseint arduino



لماذا تعيد parseInt(1/0، 19) 18؟ (3)

إليك تسلسل الأحداث:

  • 1/0 تقييم 1/0 إلى ما لا نهاية
  • يقرأ parseInt Infinity ويلاحظ بسعادة أن I 18 في الأساس 19
  • يتجاهل parseInt باقي السلسلة ، حيث لا يمكن تحويلها.

لاحظ أنك ستحصل على نتيجة لأي أساس >= 19 ، ولكن ليس للأسباب الموجودة أدناه. بالنسبة إلى القواعد >= 24 ، ستحصل على نتيجة أكبر ، حيث يصبح n رقمًا صالحًا عند هذه النقطة.

https://src-bin.com

لدي مشكلة مزعجة في JavaScript.

> parseInt(1 / 0, 19)
> 18

لماذا تعيد parseInt 18 ؟


Answer #1

لإضافة إلى الإجابات المذكورة أعلاه

يعادل parseInt("Infinity",19) parseInt(1/0,19) parseInt("Infinity",19)

ضمن 19 قاعدة أرقام 0-9 و AI (or ai) هي أرقام صالحة. لذلك ، من "اللانهاية" يأخذ I من القاعدة 19 ويتحول إلى القاعدة 10 التي تصبح 18 ثم يحاول أخذ الحرف التالي أي n الذي لا يوجد في الأساس 19 حتى يتجاهل الأحرف التالية (حسب سلوك javascript لسلسلة التحويل إلى الرقم)

لذا ، إذا قمت بكتابة 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

Answer #2

نتيجة 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