تحلل هذه المقالة مشكلة دقة عدد صحيح JS Long. شاركه للرجوع إليه. التحليل المحدد هو كما يلي:
وصف المشكلة:
هناك وظيفة نصية في الخلفية ، والتي يمكن أن تكتب البرامج النصية للاتصال برمز Java بشكل ديناميكي
نسخة التعليمات البرمجية كما يلي: importclass (com.ztgame.center.controller.api ، p360apicontroller) ؛
var roboid = 10214734953631045 ؛
P360APICONTROLLER.NOTICE (ROLEID ، 4) ؛
تم تنفيذ البرنامج النصي بنجاح ، لكن النتيجة الجارية كانت مختلفة عن الإعدادات. هذا الشخص لم يتلق البريد الإلكتروني
عرض جائزة إعادة شحن السجل قد تم إرسالها. ROLOD = 10214734953631044 ؛
رقم معرف الحرف هذا أقل ، هذا ...
تحليل المشكلة:
يجب أن تكون مشكلة الدقة JS.
دقة
يصل عدد صحيح (بدون العد العشري أو الأسي) إلى 15 رقمًا.
الحد الأقصى لعدد الأرقام العشرية هو 17 ، لكن عمليات النقطة العائمة ليست دائمًا دقيقة بنسبة 100 ٪:
تعديل البرنامج النصي
نسخة الكود كما يلي: var roboid = 10214734953631045 ؛
VAR OUTPUT = ROLEID ؛
الإخراج:
1.0214734953631044e16 ؛
هذا ليس خطأ جافا سكريبت ، كما أنه ليس خطأ جافا. التحويل أعلاه إلى Long هو في الواقع ROLOD = 10214734953631044 ؛
هل يمكن القيام بذلك؟
تقوم JavaScript Console بإدخال سلاسل ، ثم تستدعي Integer.valueof أو Long.valueof تحويل في Java؟
حل:
اكتب طريقة تحويل عامة لتمرير معرف الدور إلى سلسلة إلى Javascriptengine
نسخة الكود كما يلي: importclass (com.ztgame.common.util.stringkit) ؛
ImportClass (com.ztgame.center.controller.api ، p360apicontroller) ؛
أعلن كسلسلة
نسخة الكود كما يلي: var roboid = "10214734953631045" ؛
وبهذه الطريقة ، ما يحصل عليه Javascriptengine هو سلسلة. في الواقع ، الوظيفة هي جافا لمعالجتها.
نسخة الكود كما يلي: p360apicontroller.notice (stringkit.parselong (rolyid) ، 4) ؛
التنفيذ ناجح ، فقط استخدمه أولاً ~
آمل أن تكون هذه المقالة مفيدة لبرمجة JavaScript للجميع.