JS的数字类型目前支持的最大值为:9007199254740992,一旦数字超过这个值,JS将会丢失精度,导致前后端的值出现不一致。

JAVA的Long类型的最大值为:9223372036854775807,snowflake的算法在实现上确实没问题的,但实际运用的时候一定要避免这个潜在的深坑。

一、整数:

案列1:(19位)

JS数字超限导致精度丢失问题原因及解决方案_javascript

案列2:(18位)

JS数字超限导致精度丢失问题原因及解决方案_十进制_02

 

案例3:(17位)

JS数字超限导致精度丢失问题原因及解决方案_java_03

 

案例3-2:(17位) 

JS数字超限导致精度丢失问题原因及解决方案_javascript_04

案例4:(16位)

JS数字超限导致精度丢失问题原因及解决方案_javascript_05

二、带小数:

案例1:

JS数字超限导致精度丢失问题原因及解决方案_javascript_06

案例2:

JS数字超限导致精度丢失问题原因及解决方案_java_07

总结:

JS 中能精准表示的最大整数是 Math.pow(2, 53),十进制即 9007199254740992,JavaScript中Number最大的安全整数为16位。如果超出后还需使用可以考虑转换成String类型。