Artikel ini menganalisis masalah akurasi integer panjang JS. Bagikan untuk referensi Anda. Analisis spesifiknya adalah sebagai berikut:
Deskripsi Masalah:
Ada fungsi skrip di latar belakang, yang dapat menulis skrip untuk memanggil kode java secara dinamis
Salinan kode adalah sebagai berikut: ImportClass (com.ztgame.center.controller.api, p360apicontroller);
var roleID = 10214734953631045;
p360apicontroller.notice (RoleID, 4);
Skrip itu dijalankan dengan sukses, tetapi hasil berjalan berbeda dari pengaturan. Orang ini tidak menerima email
Lihat penghargaan Log Recharge telah dikirim. RoleID = 10214734953631044;
Nomor ID karakter ini 1 lebih sedikit, ini ...
Analisis Masalah:
Itu harus menjadi masalah presisi JS.
Ketepatan
Integer (tanpa penghitungan desimal atau eksponensial) adalah hingga 15 digit.
Jumlah maksimum digit desimal adalah 17, tetapi operasi titik mengambang tidak selalu 100% akurat:
Ubah skrip
Salinan kode adalah sebagai berikut: var roleID = 10214734953631045;
output var = roleID;
Keluaran:
1.0214734953631044E16;
Ini bukan kesalahan JavaScript, juga bukan kesalahan Java. Konversi di atas menjadi panjang memang roleid = 10214734953631044;
Bisakah itu dilakukan?
JavaScript konsol input string, dan kemudian memanggil integer.valueof atau long.valueof konversi di java?
Larutan:
Tulis metode konversi umum untuk meneruskan ID peran ke dalam string ke javascriptengine
Salinan kode adalah sebagai berikut: ImportClass (com.ztgame.common.util.stringkit);
ImportClass (com.ztgame.center.controller.api, p360apicontroller);
Menyatakan sebagai string
Salinan kode adalah sebagai berikut: var roleId = "10214734953631045";
Dengan cara ini, apa yang didapat JavaScriptEngine adalah string. Bahkan, pekerjaan itu adalah Java untuk memprosesnya.
Salinan kode adalah sebagai berikut: p360apicontroller.notice (stringkit.parselong (roleId), 4);
Eksekusi berhasil, cukup gunakan dulu ~
Saya harap artikel ini akan membantu pemrograman JavaScript semua orang.