Javascript的安全整数精度问题
Summary: Author: 张亚飞 | Read Time: 1 minute read | Published: 2016-03-08
Filed under
—
Categories:
Linux
—
Tags:
Note,
JavaScript的安全整数精度问题
最近遇到一个问题,就是传了一个超级大的uint64,结果前端发现数字对不上,精度丢失了!原因就在于,JS的Number是 “64-bit floating point IEEE 754 number”。
最大能表示的数是 Number.MAX_SAFE_INTEGER
,一般来说,就是:
2^53-1
, 或者 9,007,199,254,740,991
使用 Javascript 传到后端
{
"unum": 756273004521996288
}
变成了
{
"unum": 756273004521996300
}
查 Mysql 数据库也是糢糊近似查询
- 查
756273004521996224
得出756273004521996300
的结果 - 查
756273004521996223
就查不到结果
select * from cdn_user where uno = 756273004521996224
582961 SASMt8Naa0Q1tPezTNgmr60S84dvYp2F 20284 756273004521996300 启航
595199 SASMt8Naa0Q1tPezTNgmr60S84dvYp2F 20726 756273004521996300 启航
- 查
1142761904413061120
得出1142761904413061100
的结果
select * from cdn_user where uno = 1142761904413061120
598217,SASMt8Naa0Q1tPezTNgmr60S84dvYp2F,20726,1142761904413061100,52Hertz
查以下两个数字转二进制是一样的
756273004521996288 756273004521996227
当JS遇到uint64:JS整数溢出问题 JS 中的 MAX_VALUE 和 MAX_SAFE_INTEGER 是怎么来的
参考
Comments