この記事では、JS Long Integer精度の問題を分析します。参照のためにそれを共有してください。特定の分析は次のとおりです。
問題の説明:
バックグラウンドにスクリプト関数があり、Javaコードを動的に呼び出すスクリプトを書くことができます
コードコピーは次のとおりです。ImportClass(com.ztgame.center.controller.api、p360apicontroller);
var leolid = 10214734953631045;
P360APICONTROLLER.NOTICE(ROLIID、4);
スクリプトは正常に実行されましたが、実行の結果は設定とは異なりました。この人は電子メールを受け取りませんでした
ログリチャージ賞が送信されました。 roleID = 10214734953631044;
この文字ID番号は1少ない、これ...
問題分析:
JS精度の問題である必要があります。
正確さ
整数(小数または指数カウントなし)は最大15桁です。
小数の最大桁数は17ですが、浮動小数点操作は常に100%正確ではありません。
スクリプトを変更します
コードコピーは次のとおりです。VAROLID= 10214734953631045;
var output = roleId;
出力:
1.0214734953631044E16;
これはJavaScriptのせいではなく、Javaのせいでもありません。上記のロングへの変換は、実際にはroleID = 10214734953631044です。
それはできますか?
JavaScriptコンソールは文字列を入力し、Javaでinteger.valueofまたはlong.valueof変換を呼び出しますか?
解決:
一般的な変換方法を作成して、役割IDを文字列にjavascriptengineに渡す
コードコピーは次のとおりです。ImportClass(com.ztgame.common.util.stringkit);
ImportClass(com.ztgame.center.controller.api、p360apicontroller);
文字列として宣言します
コードコピーは次のとおりです。VAROLID= "10214734953631045";
このように、JavaScriptEngineが取得するのは文字列です。実際、仕事はそれを処理するJavaです。
コードコピーは次のとおりです。P360APICONTROLLER.NOTICE(StringKit.Parselong(RoleID)、4);
実行は成功しています。最初に使用してください〜
この記事がみんなのJavaScriptプログラミングに役立つことを願っています。