DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> JS長整型精度問題實例教程分析
JS長整型精度問題實例教程分析
編輯:關於JavaScript     

本文實例分析了一個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程序設計有所幫助。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved