本文實(shí)例分析了一個(gè)JS長(zhǎng)整型精度問題。分享給大家供大家參考。具體分析如下:
問題描述:
后臺(tái)有一個(gè)腳本功能,可編寫腳本動(dòng)態(tài)調(diào)用Java代碼
腳本執(zhí)行成功,但運(yùn)行結(jié)果與設(shè)定不一樣,此人沒有收到郵件
查看日志 recharge award has been sent. roleId=10214734953631044;
這角色I(xiàn)D數(shù)字少1,這....
問題分析:
應(yīng)該是JS精度問題,
精度
整數(shù)(不使用小數(shù)點(diǎn)或指數(shù)計(jì)數(shù)法)最多為 15 位。
小數(shù)的最大位數(shù)是 17,但是浮點(diǎn)運(yùn)算并不總是 100% 準(zhǔn)確:
修改腳本
輸出:
1.0214734953631044E16;
這不是JavaScript的錯(cuò),也不是Java的錯(cuò),上面轉(zhuǎn)成Long 確實(shí)是 roleId=10214734953631044;
可不可以那樣呢?
javascript控制臺(tái)輸入的都是字符串,然后調(diào)用java里的Integer.valueOf或者Long.valueOf轉(zhuǎn)換呢?
解決方案:
編寫一個(gè)通用的轉(zhuǎn)化方法 目的把角色I(xiàn)D用字符串傳到JavaScriptEngine
申明為字符串
執(zhí)行成功,先就這樣用吧~
希望本文所述對(duì)大家的javascript程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注