Jquery的JSON响应.ajax四舍五入较大的数字,所以我不能得到正确的值

JSON response from Jquery.ajax is rounding larger number so I can't get correct value

本文关键字:不能 ajax 响应 JSON 四舍五入 数字 Jquery      更新时间:2023-09-26

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

[
  {
    "registrantKey": 4131401026087862797,
  }
]

但是当我这样做的时候:

.done(function(data, textStatus, jqXHR) {
    $.each(data, function(index){
    console.log(data[index].registrantKey);
    });
})

将此注册键值视为一个大数,并将最后的数字四舍五入,因此打印到控制台的值为:4131401026087863000。我如何得到原来的值,如所示的Paw/Postman。我不需要对它做任何数学运算,我只需要它的值。我试着用toString()方法进行实验,但我无法让它工作。非常感谢您的帮助。

不幸的是,这在javascript中是不可能的。唯一的解决方案是使用另一种语言或尝试让原始开发人员以字符串形式返回值。谢谢Rory和Madalin。

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

如果你需要显示一个更大的数字,那么你必须把它作为一个字符串来处理,但要注意,如果你试图将它转换为数字类型,它将被舍入到JS可以使用的最大精度。

如果您可以将json作为字符串而不是对象(可能在jqXHR对象中)访问,则可以将所有数字转换为字符串,如下所示:

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

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

加载jsonText作为对象后

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

然后在一些错误之后,我们修改了json序列化器(jackson lib),如果value是Number的实例,则将其写入字符串;从后端发送字符串作为application/json;删除前端代码,因为如果内容类型是json, jquery会解析;

使用bignnumber JQ插件

处理大数