假设一个场景,MybatisPlus
的雪花算法
生成long类型主键ID,存入数据库,前端获取到数据后,要执行一个更新操作(updateById),但这时会出现无法成功更新的情况!这是因为前端在长度大于17位时会出现精度丢失的问题。
Number转换19位(6145390195186705543
)后结果为 6145390195186705000
造成原因:看网上资料说:js的number类型有个最大安全值,即
2的53次方
(9007199254740992),超过这个值就会出现精度丢失
的问题。
经过个人测试,上面这个说法还是不准确的,应该是超过16
位出现精度丢失,16位以后的数字都会转换成0。
这是因为JS是弱语言,前端接收数字类型参数为number,最大接收长度为16位,超出长度则会丢失精度,而JAVA的Long类型长度为19位,所以传输到前端的后三位精度丢失,所以我们解决该问题的思路就是:把java里的Long类型转换为String返回给前端。
作者:瓩千瓦
链接:https://www.jianshu.com/p/d2eb9795c359
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。