Dieser Artikel analysiert ein JS Long Ganzzahlgenauigkeitsproblem. Teilen Sie es für Ihre Referenz. Die spezifische Analyse ist wie folgt:
Problembeschreibung:
Im Hintergrund befindet sich eine Skriptfunktion, mit der Skripts schreiben können, um Java -Code dynamisch aufzurufen
Die Codekopie lautet wie folgt: ImportClass (com.ztgame.center.controller.api, p360APICONTROLLER);
var rollen = 10214734953631045;
p360APICONTROLLER.NOTICE (ROLLEID, 4);
Das Skript wurde erfolgreich ausgeführt, aber das laufende Ergebnis unterschied sich von den Einstellungen. Diese Person erhielt die E -Mail nicht
Sehen Sie sich den Preis für die Log -Aufladung an. rollen = 10214734953631044;
Diese Zeichen -ID -Nummer ist 1 weniger, diese ...
Problemanalyse:
Es sollte ein JS -Präzisionsproblem sein.
Genauigkeit
Eine Ganzzahl (ohne Dezimal- oder Exponentialzählung) beträgt bis zu 15 Ziffern.
Die maximale Anzahl von Ziffern einer Dezimalzahl beträgt 17, aber schwimmende Punktvorgänge sind nicht immer 100% genau:
Ändern Sie das Skript
Die Codekopie lautet wie folgt: var rollen = 10214734953631045;
var output = rollen;
Ausgabe:
1.0214734953631044e16;
Dies ist weder die Schuld von JavaScript noch die Schuld von Java. Die obige Umwandlung in Long ist in der Tat Rollen- und 10214734953631044;
Kann das getan werden?
Die JavaScript -Konsole gibt Zeichenfolgen ein und ruft dann Integer.Valueof oder Long.Valueof Conversion in Java auf?
Lösung:
Schreiben Sie eine allgemeine Konvertierungsmethode, um die Rollen -ID in eine Zeichenfolge an Javascriptengine zu übergeben
Die Codekopie lautet wie folgt: ImportClass (com.ztgame.common.util.stringkit);
ImportClass (com.ztgame.center.controller.api, p360APICONTROLLER);
Als Zeichenfolge deklarieren
Die Codekopie lautet wie folgt: var rolEID = "10214734953631045";
Auf diese Weise erhält Javascriptengine eine Schnur. Tatsächlich ist der Job Java, um es zu verarbeiten.
Die Codekopie lautet wie folgt: p360APICONTROLLER.NOTICE (StringKit.Parselong (Rollen -ID), 4);
Die Ausführung ist erfolgreich. Verwenden Sie sie einfach zuerst ~
Ich hoffe, dieser Artikel wird für JavaScript -Programme aller hilfreich sein.