关于雪花算法JS数值精度丢失的问题

在使用雪花算法(SnowFlake)的时候,产生18位的Long类型数值。
如: 668565260419989504,在JS中变为 668565260419989500java

分析

JS的基础类型Number,遵循IEEE 754规范,采用双精度存储(double precision),具备53位有效数字精度,并总共占用64 bit。默认模式是最近舍入(Round to Nearest)。
不超过Math.pow(2, 53) = 9007199254740992(16位) 不会丢失精度。算法

处理

// Jackson
@JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class)
private long id;

// FastJson
@JSONField(serializeUsing = com.alibaba.fastjson.serializer.ToStringSerializer.class)
private long id;