JS长整型精度问题

转载 2016年05月30日 11:05:47

本文实例分析了一个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);

js 长整型精度问题-那些年踩过的坑

决定整理一些踩过的坑,就叫那些年踩过的坑吧,今天要说的是最近发生的JS 问题。 这是由于一系列修改而引发出来的,先是运营妹子跑过来说客户购汇订单支付不成功,果断查看日志,是“ID 重复” 导致...
  • leaf_0303
  • leaf_0303
  • 2018年01月29日 17:45
  • 23

JavaScript类型转换 (整型---浮点型)

JavaScript类型转换 (整型---浮点型) JavaScript类型转换 (整型---浮点型) 1. 转换函数: js提供了parseInt()和parseFloat()两个转...
  • lixingworkCCC
  • lixingworkCCC
  • 2012年07月11日 14:45
  • 24827

解决js处理Long类型丢失精度的问题

js处理Long类型丢失精度问题
  • xufei_0320
  • xufei_0320
  • 2017年10月15日 20:19
  • 1327

后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况,以及解决方案

后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况。例如:201511200001725439这样一个Long类型的整数,传给前端后会变成201511200001725440。 解决方法...
  • qq_16055765
  • qq_16055765
  • 2018年01月09日 15:56
  • 199

js中如果long类型值过长,字段自动截取问题

js代码遇到一个奇怪的问题: id变量的值,和它右边的值不相等。 原来数字类型的字符串,在js中,默认是long类型的。 只需要在后面的字符串加上双引号就可以了,将其显示的表示为字符串。...
  • u010523770
  • u010523770
  • 2016年06月12日 13:59
  • 4757

JavaScript数值最大精度

JavaScript数值最大精度 根据国际标准 IEEE 754,JavaScript 浮点数的64个二进制位,从最左边开始,是这样组成的: 第1位:符号位,0表示正数,1表示负数 第2位到...
  • sunny05296
  • sunny05296
  • 2018年01月17日 08:52
  • 38

js大数损失精度

如题,执行如下代码   var test = 12345678912345678912; alert(test);   结果会是12345678912345678000,这就是我要说的问题,js中比...
  • zhya910702
  • zhya910702
  • 2015年04月21日 16:21
  • 1101

js中的小数计算精度问题,修正计算精度

js 的精度问题这个网上比较多,进行加减乘除运算也难免,常见的比如: 1)在控制台 输入:1.1+0.3 运算结果是:1.4000000000000001,根本原因也就是二进制和十进制转换的问题,具体...
  • sflf36995800
  • sflf36995800
  • 2016年06月16日 13:40
  • 2386

JS长整型精度问题

本文实例分析了一个JS长整型精度问题。分享给大家供大家参考。具体分析如下: 问题描述: 后台有一个脚本功能,可编写脚本动态调用Java代码 复制代码 代码如下:importClass(com.z...
  • zh609718046
  • zh609718046
  • 2016年05月30日 11:05
  • 1695

在JavaScript中判断整型的N种方法示例介绍

整数类型(Integer)在JavaScript经常会导致一些奇怪的问题。在ECMAScript的规范中,他们只存在于概念中: 所有的数字都是浮点数,并且整数只是没有一组没有小数的数字。 ...
  • dsghfdert
  • dsghfdert
  • 2014年06月20日 11:44
  • 302
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JS长整型精度问题
举报原因:
原因补充:

(最多只允许输入30个字)