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 相关文章推荐
Seajs的学习笔记
Mar 04 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
Aug 04 Javascript
JavaScript实现搜索框的自动完成功能(一)
Feb 25 Javascript
js中判断变量类型函数typeof的用法总结
Aug 09 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
Dec 21 Javascript
js时间控件只显示年月
Jan 08 Javascript
JS Testing Properties 判断属性是否在对象里的方法
Oct 01 Javascript
jquery实现企业定位式导航效果
Jan 01 jQuery
webpack4.0 入门实践教程
Oct 08 Javascript
Vue修改项目启动端口号方法
Nov 07 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
Oct 28 Javascript
详解Vue中的自定义指令
Dec 07 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
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
推荐php模板技术[转]
2007/01/04 PHP
php 代码优化的42条建议 推荐
2009/09/25 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
PHP文件操作详解
2016/12/30 PHP
PHP的mysqli_stmt_init()函数讲解
2019/01/24 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
jquery实现div拖拽宽度示例代码
2013/07/31 Javascript
js获取通过ajax返回的map型的JSONArray的方法
2014/01/09 Javascript
js返回上一页并刷新的多种实现方法
2014/02/26 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
实例代码讲解jquery easyui动态tab页
2015/11/17 Javascript
js获取页面及个元素高度、宽度的代码
2016/04/26 Javascript
js实现背景图自适应窗口大小
2017/01/10 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
windows下vue-cli及webpack搭建安装环境
2017/04/25 Javascript
前端把html表格生成为excel表格的实例
2017/09/19 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
2017/12/07 Javascript
通过js给网页加上水印背景实例
2019/06/17 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
python使用socket远程连接错误处理方法
2015/04/29 Python
python保存字符串到文件的方法
2015/07/01 Python
查看Django和flask版本的方法
2018/05/14 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
基于python 取余问题(%)详解
2020/06/03 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
Python如何将装饰器定义为类
2020/07/30 Python
python实现扫雷游戏的示例
2020/10/20 Python
酒店前厅员工辞职信
2014/01/08 职场文书
物理学专业自荐信
2014/06/11 职场文书
认真学习保证书
2015/02/26 职场文书
Go语言设计模式之结构型模式
2021/06/22 Golang
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android