Heim >Web-Frontend >js-Tutorial >Beispielanalyse von JS-Long-Integer-Precision-Problem_Javascript-Fähigkeiten

Beispielanalyse von JS-Long-Integer-Precision-Problem_Javascript-Fähigkeiten

WBOY
WBOYOriginal
2016-05-16 16:20:221282Durchsuche

In diesem Artikel wird ein JS-Long-Integer-Präzisionsproblem anhand eines Beispiels analysiert. Teilen Sie es als Referenz mit allen. Die spezifische Analyse lautet wie folgt:

Problembeschreibung:

Im Hintergrund gibt es eine Skriptfunktion, die Skripte schreiben kann, um Java-Code dynamisch aufzurufen

Code kopieren Der Code lautet wie folgt:
importClass(com.ztgame.center.controller.api,P360ApiController);
var RoleId = 10214734953631045; p360ApiController.notice(roleId, 4);
Das Skript wurde erfolgreich ausgeführt, aber die Ergebnisse unterschieden sich von den Einstellungen. Diese Person hat die E-Mail nicht erhalten

Die Belohnung für die Protokollaufladung wurde gesendet. RoleId=10214734953631044;

Die ID-Nummer dieses Charakters ist 1 weniger, dieser....

Problemanalyse:

Es sollte ein JS-Präzisionsproblem sein,

Genauigkeit

Ganzzahlen (ohne Dezimalpunkt oder Exponentenschreibweise) können bis zu 15 Ziffern lang sein.

Die maximale Anzahl an Dezimalstellen beträgt 17, Gleitkomma-Arithmetik ist jedoch nicht immer 100 % genau:

Skript ändern


Code kopieren Der Code lautet wie folgt:
var RoleId = 10214734953631045; var-Ausgabe = Rollen-ID;

Ausgabe: 1.0214734953631044E16;


Dies ist weder die Schuld von JavaScript noch von Java. Die obige Konvertierung in Long ist tatsächlich RoleId=10214734953631044;

Ist das möglich?

Die Javascript-Konsoleneingaben sind alle Zeichenfolgen und rufen dann die Konvertierung Integer.valueOf oder Long.valueOf in Java auf?


Lösung:

Schreiben Sie eine allgemeine Konvertierungsmethode, um die Zeichen-ID als Zeichenfolge an JavaScriptEngine zu übergeben


Code kopieren Der Code lautet wie folgt:importClass(com.ztgame.common.util.StringKit); > importClass(com.ztgame.center.controller.api,P360ApiController);

Als Zeichenfolge deklariert


Code kopieren Der Code lautet wie folgt:var roleId = "10214734953631045";
Auf diese Weise erhält JavaScriptEngine eine Zeichenfolge. Tatsächlich wird die Arbeit von Java erledigt


Code kopieren Der Code lautet wie folgt:p360ApiController.notice(StringKit.parseLong(roleId), 4);
Die Ausführung ist erfolgreich, verwenden Sie es einfach so~
Ich hoffe, dass dieser Artikel für das JavaScript-Programmierdesign aller hilfreich sein wird.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn