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 相关文章推荐
短信提示使用 特效
Jan 19 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
Dec 24 Javascript
jQuery中实现动画效果的基本操作介绍
Apr 16 Javascript
jquery 清空file域示例(兼容个浏览器)
Oct 11 Javascript
appendChild() 或 insertBefore()使用与区别介绍
Oct 11 Javascript
jquery 快速回到页首的方法
Dec 05 Javascript
JSON 对象未定义错误的解决方法
Sep 29 Javascript
bootstrap响应式表格实例详解
May 15 Javascript
详解vuex之store源码简单解析
Jun 13 Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
Sep 03 Javascript
js实现鼠标拖拽div左右滑动
Jan 15 Javascript
javascript设计模式之迭代器模式
Jan 30 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代码书写习惯优化小结
2013/06/20 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
用prototype实现的简单小巧的多级联动菜单
2007/03/24 Javascript
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
2007/03/27 Javascript
JavaScript 对象的属性和方法4种不同的类型
2010/03/19 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
JS克隆,属性,数组,对象,函数实例分析
2016/11/26 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
vue 中自定义指令改变data中的值
2017/06/02 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
关于自定义Egg.js的请求级别日志详解
2018/12/12 Javascript
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
Vue.directive 实现元素scroll逻辑复用
2019/11/29 Javascript
Vue清除定时器setInterval优化方案分享
2020/07/21 Javascript
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
python中去空格函数的用法
2014/08/21 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
python互斥锁、加锁、同步机制、异步通信知识总结
2018/02/11 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
Django数据统计功能count()的使用
2020/11/30 Python
美国睫毛、眉毛精华液领导品牌:RevitaLash Cosmetics
2018/03/26 全球购物
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
大学生毕业的自我评价分享
2014/01/02 职场文书
预备党员转正思想汇报
2014/01/12 职场文书
质量安全标语
2014/06/07 职场文书
创先争优活动承诺书
2014/08/30 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
单位考核聘任报告
2015/03/02 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书
Django REST framework 限流功能的使用
2021/06/24 Python
Redis RDB技术底层原理详解
2021/09/04 Redis
SpringBoot集成Redis的思路详解
2021/10/16 Redis