先前言讲述下,项目中碰到的一个奇葩问题,项目中有个列表启用按钮,界面操作流程是先选择某一行记录选中点击启用,可是选中后某一行竟然没有操作上。

于是就前端debug查看下前端传递后端参数值是否有问题

果真有个id的值,后端数据库查询返回给前端的是13557206188654767 结果启用传给后端的接口id值变成了13557206188654768

看到这个问题,于是就搜索引擎关于js 超过16位失真的问题 ,找了篇文章大概理解了下

js精度丢失问题

js超过16位失真

JavaScript 存储小数和其它语言如 Java 和 Python 都不同,JavaScript 中所有数字包括整数和小数都只有一种类型 即 Number类型

js的number有个最大值(安全值)。即2的53次方,为9007199254740992。如果超过这个值,那么js会出现不精确的问题。这个值为16位。

如何防止这个事情发生呢?

1.后端转成字符串返回给前端处理
2.使用前端其他js组件引入处理。比如decimal.js附上地址decimal.js
3.项目中数据库设计字段控制长整型数字位数在16位以内 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐