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

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

时间: 2024-11-01 08:30:23

JS长整型精度问题实例分析_javascript技巧的相关文章

js多个物体运动功能实例分析_javascript技巧

本文实例分析了js实现的多个物体运动功能.分享给大家供大家参考,具体如下: 与单个的区别:得知道哪个在动,所以运动函数需要两个参数,出了目标iTarget之外,还要obj.另外需要多个计数器,否则当一个还没运动完就移入另一个物体会发生卡壳 window.onload=function(){ var aDiv=document.getElementsByTagName("div"); var timer=null; var i; for(i=0;i<aDiv.length;i++)

JS遍历数组及打印数组实例分析_javascript技巧

本文实例分析了JS遍历数组及打印数组的方法.分享给大家供大家参考,具体如下: 一直头痛与JS的打印数组,也没看到什么比较好的方法,写一个简单的方法备用. // 遍历数组 var dd = { 'a' : '111111', 'b' : '222222', 'c' : '333333' } dd['d'] = ['444444','55555555']; // 遍历数组 function scan_array(arr) { for(var key in arr) { // 这个是关键 if(typ

JS中FRAME的操作问题实例分析_javascript技巧

本文实例探讨了JS中FRAME的操作问题,分享给大家供大家参考.具体分析如下: 以上图为例,在这里把frame之间的互相操作简单列为:1变量2方法3页面之间元素的互相获取. 一.  首先从 父(frameABC)------->子(frameA,frameB,frameC) ① 访问变量名name 假如在frameABC中操作那么可以: 复制代码 代码如下: window.frames("frameA").contentWindow.name 或者 复制代码 代码如下: docu

js上传图片及预览功能实例分析_javascript技巧

本文实例讲述了js上传图片及预览功能.分享给大家供大家参考.具体分析如下: 参考了网上一些人代码写了一个上传图片及时预览的功能 <img id="imgTag" style="height: 100px;" alt="" /> <input type="file" /> function DisplayImage(fileTag,imgTagId){ var allowExtention=".

JS自定义选项卡函数及用法实例分析_javascript技巧

本文实例讲述了JS自定义选项卡函数及用法.分享给大家供大家参考.具体如下: 这里分享一个JS选项卡函数附带演示效果,选项卡函数参数调用说明: cmd:点击元素集合 con:显示容器集合 evt:触发事件 css:为当前点击元素的样式名称 index:为默认显示第几项的索引值 目前选项卡的样式还比较简洁和粗糙,想用的自己动动手美化一下. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-zdy-tab-cha-fun-style-codes/

JS继承用法实例分析_javascript技巧

本文实例分析了JS继承的用法.分享给大家供大家参考.具体分析如下: 继承 : 子类不影响父类,子类可以继承父类的一些功能 ( 代码复用 ) 属性的继承 : 调用父类的构造函数 call 方法的继承 : for in :  拷贝继承 (jquery也是采用拷贝继承extend) 1. 拷贝继承 function Person (name){ this.name = name; } Person.prototype.showName =function (){ alert(this.name); }

js常用系统函数用法实例分析_javascript技巧

本文实例讲述了js常用系统函数用法.分享给大家供大家参考. 具体代码如下: 复制代码 代码如下: <html> <head> </head> <body> <script type="text/javascript"> //1. escape()函数,把字符串转成各计算机平台通用的unicode编码:解码(转回去)则用enescape(). var str = '王美人'; document.write(escape(str)

js轮盘抽奖实例分析_javascript技巧

现在学习到了过渡效果了,已经开始有做动画效果的意识了,会实现一些比较炫的小玩意,一个网页加入过渡动画效果,会让人看起来很有美观,不僵硬,有看头,动画是一个网页美观的主要体现之一,下面做个使用个过渡效果实现的抽奖例子.  先来效果图:  这个的实现需要使用到一些js代码. 所需图片: 这张图是pointer.png的位置的. turntable-bg.jpg这张是背景图,在背景位置. 这张是turntable.png位置的.   需要这三张图片,如果要实现一下,直接另存这三图片引入进去即可.如果不

JS瀑布流实现方法实例分析_javascript技巧

本文实例分析了JS瀑布流实现方法.分享给大家供大家参考,具体如下: 描述: 1.每个图片宽度都一样,高度不一样 思路: 1.算出一共有几列(通过视窗总宽度/单个图片宽度得出) 2.根据一共几列*单个图片宽度,设置外围总宽度并水平居中(注:这个宽度应该是计算出来的,而不是定死,因为窗口大小会改变) 3.将第一行图片高度按顺序填充进数组 4.算出第一行图片里高度最短的那个,将第二行的第一张图片添加到其后(绝对定位),添加完第二行第一张,更新他的高度,然后重新计算最短,再开始之前的过程 5.鼠标在滑动