لدى JS نوع بيانات عددي واحد فقط. سواء كان ذلك عددًا صحيحًا أو رقمًا عائمًا ، يقوم JS بتصنيفه كرقم.
نوع 17 ؛ // "رقم"
Typeof 98.6 ؛ // "رقم"
نوع 2.1 ؛ // "رقم"
جميع الأرقام في JS هي أرقام نقاط عائمة دقة مزدوجة. إنه رقم مشفر 64 بت صاغه معيار IEEE754 (ما هذا الشيء ، لا أعرف ، فقط ابحث عنه وتحقق منه)
فكيف تعبر عن أعداد صحيحة؟ يمكن أن تمثل أرقام النقاط العائمة الدقة المزدوجة بشكل مثالي من أعداد صحيحة بدقة تصل إلى 53 بت (لا يوجد مفهوم ، لم أقم بمعالجة الكثير من البيانات ، ولم أستخدمها!) ، وجميع الأعداد الصحيحة من -9007199254740992 (-253) إلى 900719925474092 (253).
يمكن حساب معظم عوامل الحساب باستخدام الأعداد الصحيحة أو الأرقام الحقيقية أو مزيج من الاثنين.
0.1*1.9 //0.19
-99+100 // 1
21-12.3 //8.7
2.5/5 //0.5
21 ٪ 8 // 5
مشغلي الحساب مميزون للغاية. لا تحسب JS بشكل مباشر المعاملات كأرقام نقطية عائمة ، ولكنها تحولها ضمنيًا إلى أعداد صحيحة 32 بت لأداء العمليات. (على وجه الدقة ، سيتم تحويله إلى عدد صحيح يمثل 2 من endian الكبير 32 بت (لأكون صادقًا ، لا أعرف حقًا ما يعنيه هنا ، يرجى البحث عن العلم الشعبي)) استخدام تعبيرات bitwise أو العملية مثل
مثال:
8 | 1 ؛ // 9
عملية الحساب
بادئ ذي بدء ، 8 و 1 هما أرقام عائمة مزدوجة الدقة. ولكن يمكن تمثيله أيضًا كصاحب صحيح 32 بت ، أي تمثيل ثنائي 32 بت.
يتم تمثيل عدد صحيح 8 على أنه ثنائي 32 بت على النحو التالي:
0000 0000 0000 0000 0000 0000 0000 1000
قد يكون أيضا
(8) .ToString (2) ؛ // "1000"
المعلمة tostring هي قاعدة التحويل
(ما يلي هو ما حاولت تحويله باستخدام Cardinality الأخرى ، وليس له علاقة بهذه المقالة)
(8) .ToString (8) ؛ // "10"
(8) .ToString (16) ؛ // "8"
يتم تمثيل عدد صحيح 1 على أنه ثنائي 32 بت على النحو التالي:
0000 0000 0000 0000 0000 0000 0000 0000 0001
تشغيل bitwise أو
0000 0000 0000 0000 0000 0000 0000 1000
0000 0000 0000 0000 0000 0000 0000 0000 0001
------------------------------------------------------------------------------------------------------------------------------------
0000 0000 0000 0000 0000 0000 0000 1001
الشيء نفسه يستخدم التحقق من وظيفة المكتبة القياسية ، ويستخدم 2 ككلفات. لا يؤثر قيادة 0 على نتيجة الحساب ، وهو أمر غير ضروري.
Parseint ('1001' ، 2) // 9
(ما يلي هو ما حاولت تحويله باستخدام Cardinality الأخرى ، وليس له علاقة بهذه المقالة)
Parseint ('1001' ، 8) // 513
Parseint ('1001' ، 16) // 4097
تتمثل عملية تلخيص العملية الحسابية في تحويل المعاملات إلى أعداد صحيحة ، ثم استخدام وضع البتات الصحيح لأداء العمليات ، وأخيراً تحويل النتيجة إلى رقم نقطة عائم JS.
تحذير من أرقام النقاط العائمة: غير دقيق. على سبيل المثال
0.1+0.2 ؛ //0.3000000000000000000
السبب: على الرغم من أن دقة أرقام النقطة العائمة 64 بت هي بالفعل عالية جدًا ، إلا أن أرقام نقطة العائمة المزدوجة يمكن أن تمثل فقط مجموعة محدودة من الأرقام ، ولكن لا يمكن أن تمثل جميع مجموعات الأرقام الحقيقية. يمكن أن تؤدي عمليات النقطة العائمة فقط إلى نتائج تقريبية ، حيث تتجول إلى أقرب رقم حقيقي ممثل. عند إجراء سلسلة من العمليات ، كما يتراكم خطأ التقريب ، ستصبح نتائج العملية أقل دقة. يسبب التقريب أيضًا بعض الانحرافات في قوانين العمليات الحسابية. على سبيل المثال ، قانون الترابط. لأي رقم حقيقي
X ، Y ، Z سوف يرضي دائمًا (x+y)+z = x+(y+z)
النقاط العائمة ليست بالضرورة:
(0.1+0.2) +0.3 ؛ //0.60000000000000000001
0.1+ (0.2+0.3) ؛ //0.6
أرقام النقاط العائمة تزن الدقة والأداء. عندما تهتم بالدقة ، كن حذرًا في قيود أرقام النقاط العائمة.
الحل هو تحويل عمليات النقطة العائمة إلى عمليات عدد صحيح.
(10+20) +30 ؛ // 60
10+ (20+30) ؛ // 60
ثم قسّم عامل التكبير. لاحظ أن نطاق عدد صحيح يجب أن يكون ضمن -253 ~ 253.
لخص
1. أعداد JS هي أرقام نقاط عائمة مزدوجة
2. عدد صحيح JS هو مجرد مجموعة فرعية من أرقام الفاصلة المزدوجة ، وليس نوعًا واحدًا
3. عملية بت تعامل الأرقام على أنها أعداد صحيحة موقعة من 32 بت
4. احذر من دقة عمليات النقطة العائمة
إن الفهم المتعمق أعلاه لأرقام النقاط العائمة في JavaScript هو كل المحتوى الذي شاركته معك. آمل أن يعطيك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.