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表单提交的代码
Sep 13 Javascript
javascript打开新窗口同时关闭旧窗口
Jan 16 Javascript
js实现身份证号码验证的简单实例
Feb 19 Javascript
Javascript遍历table中的元素示例代码
Jul 08 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
Oct 23 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
Mar 11 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
Jun 12 Javascript
jfinal与bootstrap的登出实战详解
Nov 27 Javascript
浅谈react-router HashRouter和BrowserRouter的使用
Dec 29 Javascript
node中modules.exports与exports导出的区别
Jun 08 Javascript
浅谈Vue组件及组件的注册方法
Aug 24 Javascript
Vue的列表之渲染,排序,过滤详解
Feb 24 Vue.js
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实现读取一个1G的文件大小
2013/08/24 PHP
php获取参数的几种方法总结
2014/02/18 PHP
php随机抽奖实例分析
2015/03/04 PHP
php判断当前操作系统类型
2015/10/28 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
浅析Javascript使用include/require
2013/11/13 Javascript
跟我学习javascript的严格模式
2015/11/16 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
bootstrap表格分页实例讲解
2016/12/30 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
详解Node.js利用node-git-server快速搭建git服务器
2017/09/27 Javascript
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
Vue中使用webpack别名的方法实例详解
2018/06/19 Javascript
详解webpack-dev-server使用方法
2018/09/14 Javascript
Bootstrap4 gulp 配置详解
2019/01/06 Javascript
vue+element-ui+axios实现图片上传
2019/08/20 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
2019/11/10 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
JavaScript实现网页跨年倒计时
2020/12/02 Javascript
[49:20]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
Python中使用partial改变方法默认参数实例
2015/04/28 Python
使用Python写一个小游戏
2018/04/02 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
实例讲解Python中整数的最大值输出
2019/03/17 Python
python线程信号量semaphore使用解析
2019/11/30 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
美国领先的宠物用品和宠物食品零售商:Petco
2020/10/28 全球购物
村党支部公开承诺书
2014/05/29 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
运动会开幕式致辞
2015/07/29 职场文书
工作报告范文
2019/06/20 职场文书