首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自Jquery.ajax的JSON响应正在舍入更大的数字,所以我无法得到正确的值

问来自Jquery.ajax的JSON响应正在舍入更大的数字,所以我无法得到正确的值
EN

Stack Overflow用户
提问于 2016-11-14 09:23:36
回答 3查看 1.7K关注 0票数 4

我正在执行AJAX get请求,这是在Paw/Postman这样的程序中得到的响应:

代码语言:javascript
复制
[
  {
    "registrantKey": 4131401026087862797,
  }
]

然而,当我这样做时:

代码语言:javascript
复制
.done(function(data, textStatus, jqXHR) {
    $.each(data, function(index){
    console.log(data[index].registrantKey);
    });
})

它将注册者的键值视为一个大数字,并舍入最后一个数字,因此正在打印到控制台的值为: 4131401026087863000。如何获得原始值,如Paw/Postman中所示。我不需要对它执行任何数学运算,我只需要它的值。我尝试过用toString()方法进行实验,但我无法让它起作用。你的帮助将不胜感激。

遗憾的是,更新在javascript中是不可能的。唯一的解决方案是使用另一种语言或尝试让原始开发人员以字符串的形式返回值。谢谢罗里和麦达林。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-14 11:15:05

如果您可以以字符串而不是对象的形式访问json (可能在jqXHR对象中),则可以像这样将所有数字转换为字符串:

jsonText = jsonText.replace(/([^\D]\d+[^\D])/g, "\"$1\"").replace(/""/g, "\"");

(小心我的正则表达式,我不确定它在任何情况下是否有效)

然后将您的jsonText作为对象加载。

票数 1
EN

Stack Overflow用户

发布于 2016-11-14 09:30:44

这个问题是由于JS的精确性,与jQuery或AJAX无关。在JS中,一个数字最多只能包含16个整数,最多可以包含9,007,199,254,740,991 (又名Number.MAX_SAFE_INTEGER)。

如果需要显示更大的数字,则必须将其作为字符串处理,但请注意,如果试图将其转换为数字类型,则需要将其舍入到JS可以使用的最大精度。

票数 2
EN

Stack Overflow用户

发布于 2018-03-22 17:48:05

我的第一个解决方案是:从后端将json字符串作为文本/纯文本发送;使用horroble正则表达式将数字替换为字符串,然后解析为object。

然后,在一些bug之后,我们修改了json序列化程序(Jackson lib),如果值是数字的实例,则将其写为string;从后端将string作为application/json发送;删除了前端代码,因为jquery在内容类型为json时进行解析;

大数字操作由BigNumber JQ插件完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40585328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档