首頁 > web前端 > js教程 > JS長整數精準度問題實例分析_javascript技巧

JS長整數精準度問題實例分析_javascript技巧

WBOY
發布: 2016-05-16 16:20:22
原創
1286 人瀏覽過

本文實例分析了一個JS長整型精確度問題。分享給大家供大家參考。具體分析如下:

問題描述:

後台有一個腳本功能,可編寫腳本動態呼叫Java程式碼

複製程式碼 程式碼如下:
importClass(com.ztgame.center.controller.api,P360ApiController); var roleId = 10214734953631045; 
p360ApiController.notice(roleId, 4);
腳本執行成功,但運行結果與設定不一樣,此人沒有收到郵件

查看日誌  recharge award has been sent. roleId=10214734953631044;

這角色ID數字少1,這....

問題分析:

應該是JS精確度問題,

精度

整數(不使用小數點或指數計數法)最多為 15 位。

小數的最大位數是 17,但浮點運算並不總是 100% 準確:

修改腳本


複製程式碼 程式碼如下:
var roleId = 10214734953631045; 
var output = roleId;
輸出:

1.0214734953631044E16;

這不是JavaScript的錯,也不是Java的錯,上面轉成Long 確實是 roleId=10214734953631044;

可不可以那樣呢?

javascript控制台輸入的都是字串,然後呼叫java裡的Integer.valueOf或Long.valueOf轉換呢?

解:

寫一個通用的轉換方法 目的把角色ID用字串傳到JavaScriptEngine


複製程式碼 程式碼如下:
importClass(com.ztgame.common.util.StringKit); 
importClass(com.ztgame.center.controller.api,P360ApiController);
申明為字串


複製程式碼複製程式碼
程式碼如下:

var roleId = "10214734953631045";
這樣JavaScriptEngine拿到的 就是字串了 其實工作就是Java去處理了 複製程式碼
程式碼如下:
p360ApiController.notice(StringKit.parseLong(roleId), 4);

執行成功,先就這樣用吧~

希望本文所述對大家的javascript程式設計有所幫助。
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板