Este artículo analiza un problema de precisión entera de JS Long. Compártelo para su referencia. El análisis específico es el siguiente:
Descripción del problema:
Hay una función de script en el fondo, que puede escribir scripts para llamar dinámicamente el código Java
La copia del código es la siguiente: importclass (com.ztgame.center.controller.api, p360apicontroller);
var rolyId = 10214734953631045;
P360APICONTROLLER.NOTICE (ROLOID, 4);
El script se ejecutó con éxito, pero el resultado de ejecución fue diferente de la configuración. Esta persona no recibió el correo electrónico
Ver el premio de recarga de registros ha sido enviado. rolyId = 10214734953631044;
Este número de identificación de personaje es 1 menos, esto ...
Análisis de problemas:
Debería ser un problema de precisión JS.
Exactitud
Un entero (sin conteo decimal o exponencial) es de hasta 15 dígitos.
El número máximo de dígitos de un decimal es de 17, pero las operaciones de puntos flotantes no siempre son 100% precisos:
Modificar el script
La copia del código es la siguiente: var rolyId = 10214734953631045;
varilla var = rolyId;
Producción:
1.0214734953631044e16;
Esta no es culpa de JavaScript, ni es culpa de Java. La conversión anterior a Long es de hecho rolid = 10214734953631044;
¿Se puede hacer eso?
La consola de JavaScript ingresa cadenas y luego llama a Integer.ValueOf o Long.ValueOf Conversion en Java?
Solución:
Escriba un método de conversión general para pasar el ID de rol a una cadena a JavaScriptEngine
La copia del código es la siguiente: importclass (com.ztgame.common.util.stringkit);
importclass (com.ztgame.center.controller.api, p360apicontroller);
Declarar como una cadena
La copia del código es la siguiente: var rolyId = "10214734953631045";
De esta manera, lo que JavaScriptEngine obtiene es una cadena. De hecho, el trabajo es Java para procesarlo.
La copia del código es la siguiente: p360ApiController.notice (Stringkit.parselong (RoleID), 4);
La ejecución es exitosa, solo úsela primero ~
Espero que este artículo sea útil para la programación de JavaScript de todos.