Maison  >  Article  >  interface Web  >  Exemple d'analyse des compétences JS Long Integer Precision Problem_Javascript

Exemple d'analyse des compétences JS Long Integer Precision Problem_Javascript

WBOY
WBOYoriginal
2016-05-16 16:20:221260parcourir

Cet article analyse un problème de précision des entiers longs JS dans un exemple. Partagez-le avec tout le monde 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 dynamiquement du code Java

Copier le code Le code est le suivant :
importClass(com.ztgame.center.controller.api,P360ApiController);
var roleId = 10214734953631045
p360ApiController.notice(roleId, 4);

Le script a été exécuté avec succès, mais les résultats étaient différents des paramètres. Cette personne n'a pas reçu l'e-mail

La récompense de recharge du journal a été envoyée roleId=10214734953631044;

Le numéro d'identification de ce personnage est 1 de moins, ceci....

Analyse du problème :

Cela devrait être un problème de précision JS,

Précision

Les entiers (sans point décimal ni notation d'exposant) peuvent comporter jusqu'à 15 chiffres.
Le nombre maximum de décimales est de 17, mais l'arithmétique à virgule flottante n'est pas toujours précise à 100 % :

Modifier le script

Copier le code Le code est le suivant :
var roleId = 10214734953631045
var sortie = roleId;

Sortie :
1.0214734953631044E16;

Ce n'est pas la faute de JavaScript, ni la faute de Java. La conversion ci-dessus en Long est bien roleId=10214734953631044;

Est-ce possible ?
Les entrées de la console javascript sont toutes des chaînes, puis appellent la conversion Integer.valueOf ou Long.valueOf en Java ?

Solution :

Écrivez une méthode de conversion générale pour transmettre l'ID de caractère à JavaScriptEngine sous forme de chaîne

Copier le code Le code est le suivant :
importClass(com.ztgame.common.util.StringKit importClass(com.ztgame.center.controller.api,P360ApiController);
Déclaré sous forme de chaîne


Copier le code Le code est le suivant :
var roleId = "10214734953631045";
De cette façon, ce que JavaScriptEngine obtient est une chaîne. En fait, le travail est géré par Java
.
Copier le code Le code est le suivant :
p360ApiController.notice(StringKit.parseLong(roleId), 4);
L'exécution est réussie, utilisez-la simplement comme ça~

J'espère que cet article sera utile à la conception de la programmation JavaScript de chacun.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn