一、问题
数据库表的id为bigint,java为Long。前端接收数据,id应该是11284058870255617但是前端接收到的是11284058870255616。
二、原因
在 JavaScript 中,所有数字都以 64 位浮点格式(IEEE 754 标准)存储。
根据此标准,大整数无法被精确表示,会被四舍五入。
因此,JavaScript 只能安全地表示以下范围内的整数:
- 最大为 9007199254740991(253-1)
- 最小为 -9007199254740991(-(253-1))
超出此范围的整数值会失去精度。
JavaScript 整数最多只能精确到 15 位
三、解决办法
解决办法:将Long类型的字段转为String类型返给前端
方法一、在要返回的字段上添加@JsonSerialize(using = ToStringSerializer.class)注解,这样就能在序列化时自动将该字段类型转为String类型返给前端
方法二、在yml或properties中增加配置
spring:
jackson:
generator:
write_numbers_as_strings: true