为了账号安全,请及时绑定邮箱和手机立即绑定

有没有童鞋遇到过同样的问题:下面的代码数值类型丢失精度怎么回事哈啊?

有没有童鞋遇到过同样的问题:下面的代码数值类型丢失精度怎么回事哈啊?

慕莱坞森 2019-06-09 10:49:57
例如有一个用户类publicclassUserimplementsSerializable{privatestaticfinallongserialVersionUID=1L;privateLongid;privateStringusername;//...省略get、set}我在跳转到编辑页面时,需要携带要编辑的用户信息。大概的代码如下:@GetMapping("edit")publicStringedit(Modelmodel,@RequestParamLongid){model.addAttribute("entity",userService.findById(id));return"user/edit";}那么此时问题就出来了。在页面“user/edit”上获取到的id,精度丢失了,例如本来是94105929343041536变成了94105929343041540。要怎么改,改动最小,才能获取到正确的长整型的id值呢?
查看完整描述

2 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

publicStringedit(Modelmodel,@RequestParamLongid){}
改为
publicStringedit(Modelmodel,@RequestParamStringid){}
userService.findById(Long.valueOf(id)));
                            
查看完整回答
反对 回复 2019-06-09
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

JavaScript的number类型在处理大于9007199254740992的长整型时会丢失精度,可以以字符串的形式保存避免精度丢失。
{
"id":1234567890123456789//js读到的值是1234567890123456800
}
{
"id":"1234567890123456789"//js读到的值是'1234567890123456789'
}
给你的ID字段或其getter加个注解使其在序列化的时候转为string
@JsonSerialize(using=ToStringSerializer.class)
privateLongid;
参考SpringBoot中使用Jackson导致Long型数据精度丢失问题
                            
查看完整回答
反对 回复 2019-06-09
  • 2 回答
  • 0 关注
  • 353 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号