Cet article analyse un problème de précision en entier long JS. Partagez-le pour votre référence. L'analyse spécifique est la suivante:
Description du problème:
Il existe une fonction de script en arrière-plan, qui peut écrire des scripts pour appeler le code Java dynamiquement
La copie de code est la suivante: importClass (com.ztgame.center.controller.api, p360apiController);
var roleID = 10214734953631045;
p360apiController.NOTICE (RoleID, 4);
Le script a été exécuté avec succès, mais le résultat en cours d'exécution était différent des paramètres. Cette personne n'a pas reçu l'e-mail
Affichez le prix de recharge de journaux a été envoyé. RoleID = 10214734953631044;
Ce numéro d'identification de caractère est 1 de moins, ce ...
Analyse des problèmes:
Ce devrait être un problème de précision JS.
Précision
Un entier (sans décimal ou comptage exponentiel) est jusqu'à 15 chiffres.
Le nombre maximum de chiffres d'une décimale est de 17, mais les opérations de points flottants ne sont pas toujours précis à 100%:
Modifier le script
La copie de code est la suivante: var roleID = 10214734953631045;
Var Output = RoleID;
Sortir:
1.0214734953631044e16;
Ce n'est pas la faute de JavaScript, ni la faute de Java. La conversion ci-dessus en long est en effet RoleID = 10214734953631044;
Cela peut-il être fait?
La console JavaScript entre des chaînes, puis appelle Integer.Valueof ou Long.Valueof Conversion en Java?
Solution:
Écrivez une méthode de conversion générale pour passer l'ID de rôle dans une chaîne à Javascriptengine
La copie de code est la suivante: importClass (com.ztgame.common.util.stringkit);
ImportClass (com.ztgame.center.controller.api, p360apiController);
Déclarer comme une chaîne
La copie de code est la suivante: var roleid = "10214734953631045";
De cette façon, ce que Javascriptengine obtient est une chaîne. En fait, le travail est Java pour le traiter.
La copie de code est la suivante: p360apiController.Notice (StringKit.Parselong (RoleId), 4);
L'exécution réussit, utilisez-le d'abord ~
J'espère que cet article sera utile à la programmation JavaScript de tous.