JS中(JS转换json/jQuery转换json)中的long型大数精度丢失问题
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
最近在后台向前台传输对象id时,遇到一个奇怪的问题.类似代码如下:
var str = '{"id":217998860110340096}';
var jsonObj1 = $.parseJson(str);//jQuery插件支持的转换方式
var jsonObj2 = JSON.parse(str);//浏览器支持的转换方式(Firefox,chrome,opera,safari,ie)等浏览器
var jsonObj3 = eval('(' + str + ')'); //Javascript支持的转换方式
console.log('jsonObj1 : ' + jsonObj1.id + ' , jsonObj2 : ' + jsonObj2.id + ' , jsonObj3 : ' + jsonObj3.id);
输出结果令人惊诧,居然没一个对的.
jsonObj1 : 217998860110340100 , jsonObj2 : 217998860110340100 , jsonObj3 : 217998860110340100
之前还以为是json转换的问题 . 后来发现其实不然 , 直接用js输出也会是错误数值.
console.log(217998860110340096);//输出结果 : 217998860110340100
后来才了解到 :
JS内置有32位整数 , 而number类型的安全整数是53位 . 如果超过53位 , 则精度会丢失 . 正如现在后台传来一个64位的Long型整数 , 超过了53位 , 所以后台返回的值和前台获取的值会不一样 .
最简单的解决方法 : 后台处理将Long型的数据转换为String类型 --> String.valueOf(Long id) --> 将string传到前台去 .
当然 , 前端也并非处理不了这个问题 . 只是非常费劲 . 可以参看这篇知乎的文章点击打开链接
更深层次的研究可以参看本篇文章 深究浏览器长整型数值精度丢失问题
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e
3 个月前
8c391e04
6 个月前
更多推荐
已为社区贡献7条内容
所有评论(0)