JS長整型精度問題實例分析
本文實例分析了一個JS長整型精度問題。分享給大家供大家參考。具體分析如下:
問題描述:
后臺有一個腳本功能,可編寫腳本動態(tài)調(diào)用Java代碼
var roleId = 10214734953631045;
p360ApiController.notice(roleId, 4);
腳本執(zhí)行成功,但運行結(jié)果與設(shè)定不一樣,此人沒有收到郵件
查看日志 recharge award has been sent. roleId=10214734953631044;
這角色ID數(shù)字少1,這....
問題分析:
應該是JS精度問題,
精度
整數(shù)(不使用小數(shù)點或指數(shù)計數(shù)法)最多為 15 位。
小數(shù)的最大位數(shù)是 17,但是浮點運算并不總是 100% 準確:
修改腳本
var output = roleId;
輸出:
1.0214734953631044E16;
這不是JavaScript的錯,也不是Java的錯,上面轉(zhuǎn)成Long 確實是 roleId=10214734953631044;
可不可以那樣呢?
javascript控制臺輸入的都是字符串,然后調(diào)用java里的Integer.valueOf或者Long.valueOf轉(zhuǎn)換呢?
解決方案:
編寫一個通用的轉(zhuǎn)化方法 目的把角色ID用字符串傳到JavaScriptEngine
importClass(com.ztgame.center.controller.api,P360ApiController);
申明為字符串
這樣JavaScriptEngine拿到的 就是字符串了 其實工作就是Java去處理了
執(zhí)行成功,先就這樣用吧~
希望本文所述對大家的javascript程序設(shè)計有所幫助。
相關(guān)文章
Bootstrap Table實現(xiàn)定時刷新數(shù)據(jù)的方法
這篇文章主要介紹了Bootstrap Table實現(xiàn)定時刷新數(shù)據(jù)的方法,在這里小編比較推薦使用第二種方法,需要的朋友參考下吧2018-08-08淺談MUI框架中加載外部網(wǎng)頁或服務(wù)器數(shù)據(jù)的方法
下面小編就為大家分享一篇淺談MUI框架中加載外部網(wǎng)頁或服務(wù)器數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01JavaScript實現(xiàn)頁面實時顯示當前時間的簡單實例
這篇文章介紹了頁面實時顯示當前時間的簡單實例,有需要的朋友可以參考需要2013-07-07javascript模版引擎-tmpl的bug修復與性能優(yōu)化分析
在平時編碼中,經(jīng)常要做拼接字符串的工作,如把json數(shù)據(jù)用HTML展示出來,以往字符串拼接與邏輯混在在一起會讓代碼晦澀不堪,加大了多人協(xié)作與維護的成本。而采用前端模板機制就能很好的解決這個問題2011-10-10JS實現(xiàn)獲取數(shù)組中最大值或最小值功能示例
這篇文章主要介紹了JS實現(xiàn)獲取數(shù)組中最大值或最小值功能,結(jié)合實例形式總結(jié)分析了javascript獲取數(shù)組最大值與最小值的三種常見操作技巧,需要的朋友可以參考下2019-03-03