JS长整型精度问题实例分析


Posted in Javascript onJanuary 13, 2015

本文实例分析了一个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程序设计有所帮助。

Javascript 相关文章推荐
JS实现遮罩层效果的简单实例
Nov 12 Javascript
jquery制作 随机弹跳的小球特效
Feb 01 Javascript
必备的JS调试技巧汇总
Jul 20 Javascript
基于jQuery实现选项卡效果
Jan 04 Javascript
Javascript 详解封装from表单数据为json串进行ajax提交
Mar 29 Javascript
Bootstrap提示框效果的实例代码
Jul 12 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
Sep 19 Javascript
Vue2.0 实现单选互斥的方法
Apr 13 Javascript
详解Angular如何正确的操作DOM
Jul 06 Javascript
微信小程序多音频播放进度条问题
Aug 28 Javascript
Vue 实现登录界面验证码功能
Jan 03 Javascript
js实现视图和数据双向绑定的方法分析
Feb 05 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
Jan 13 #Javascript
javascript面向对象之定义成员方法实例分析
Jan 13 #Javascript
jQuery大于号(>)选择器的作用解释
Jan 13 #Javascript
javascript面向对象之this关键词用法分析
Jan 13 #Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
Jan 13 #Javascript
javascript面向对象之访问对象属性的两种方式分析
Jan 13 #Javascript
javascript面向对象之对象的深入理解
Jan 13 #Javascript
You might like
php $_ENV为空的原因分析
2009/06/01 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
详细解读PHP中接口的应用
2015/08/12 PHP
php打包压缩文件之ZipArchive方法用法分析
2016/04/30 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
2018/05/24 PHP
laravel Model 执行事务的实现
2019/10/10 PHP
laravel 实现划分admin和home 模块分组
2019/10/15 PHP
jQuery 打造动态渐变按钮 详细图文教程
2010/04/25 Javascript
基于Jquery+Ajax+Json的高效分页实现代码
2011/10/29 Javascript
JQuery获取浏览器窗口内容部分高度的代码
2012/02/24 Javascript
node.js中的fs.open方法使用说明
2014/12/17 Javascript
Javascript必知必会(四)js类型转换
2016/06/08 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
2016/06/23 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
Python 正则表达式入门(中级篇)
2016/12/07 Python
python爬取盘搜的有效链接实现代码
2019/07/20 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
Python使用matplotlib绘制三维参数曲线操作示例
2019/09/10 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
python 如何调用远程接口
2020/09/11 Python
canvas版人体时钟的实现示例
2021/01/29 HTML / CSS
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
双立人加拿大官网:Zwilling加拿大
2020/08/10 全球购物
办公文员的工作岗位职责
2013/11/12 职场文书
《九寨沟》教学反思
2014/04/08 职场文书
新法人代表任命书
2014/06/06 职场文书
教师党员学习群众路线心得体会
2014/11/04 职场文书
2014年个人思想工作总结
2014/11/27 职场文书