繁体   English   中英

来自Jquery.ajax的JSON响应正在舍入更大的数字,因此我无法获得正确的值

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

我正在执行一个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; 使用horroble正则表达式用字符串替换数字然后解析为对象。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM