fetch() 响应截断大数字
fetch() response truncating big numbers
我有 fetch() 设置来使用他们的 API 从 GotoWebinar 检索历史网络研讨会详细信息。它 returns 一个 JSON 具有这种结构的主体,一个对象数组:
[{
"webinarKey":5653814518315977731,
"webinarID":"562189251",
"subject":"Sample Webinar",
"organizerKey":100000000000331530
},
{
"webinarKey":9999814518315977731,
"webinarID":"999989251",
"subject":"Sample Webinar",
"organizerKey":999900000000331530
}]
我的代码正在 Zapier 操作中实现(node.js),重要的部分如下所示:
//Handle errors from fetch call
function handleFetchStatus(response){
console.log('Fetch Response Status: ' + response.status);
switch(response.status){
case 200: //Request executed properly
break;
default:
throw Error(response.status + ':' + JSON.stringify(response));
}
return response.json();
}
function handleFetchBody(oResponse){
if (oResponse) {
console.log('handleFetchBody: ' + JSON.stringify(oResponse));
}
callback(null, oResponse);
}
//Send POST request.
fetch(getFetchURL(), getFetchOptions())
.then(handleFetchStatus)
.then(handleFetchBody)
.catch(function(error) {
callback(error);
});
我遇到的问题是 'webinarKey',一个很长的数字,被从“5653814518315977731”截断为“5653814518315978000”。我相信是 json() 函数没有处理大量数据。
我该如何阻止它?
我认为我需要在使用 json() 之前将 webinarKey 转换为字符串,但我不确定如何访问该对象的所有元素。在获取响应中甚至可能吗?
与JavaScript中的精度位数有关。在 JavaScript 中,所有数字都存储为浮点数,这就像以 2 为基数而不是以 10 为基数的科学记数法。有固定数量的位(在本例中为 53)可用于表示 a
在 a * (2 ** b)
。如果您查看 Number.MAX_SAFE_INTEGER
,可以用 53 位精度表示的最大整数,您会看到它有 16 个以 10 为基数的数字。您的号码是 19。如果您只是将号码输入 JavaScript 控制台,您会看到它打印出四舍五入的版本(精度为 16 位)。如果您需要存储这么大的数字,通常最好将它们存储为字符串。
我有 fetch() 设置来使用他们的 API 从 GotoWebinar 检索历史网络研讨会详细信息。它 returns 一个 JSON 具有这种结构的主体,一个对象数组:
[{ "webinarKey":5653814518315977731, "webinarID":"562189251", "subject":"Sample Webinar", "organizerKey":100000000000331530 }, { "webinarKey":9999814518315977731, "webinarID":"999989251", "subject":"Sample Webinar", "organizerKey":999900000000331530 }]
我的代码正在 Zapier 操作中实现(node.js),重要的部分如下所示:
//Handle errors from fetch call
function handleFetchStatus(response){
console.log('Fetch Response Status: ' + response.status);
switch(response.status){
case 200: //Request executed properly
break;
default:
throw Error(response.status + ':' + JSON.stringify(response));
}
return response.json();
}
function handleFetchBody(oResponse){
if (oResponse) {
console.log('handleFetchBody: ' + JSON.stringify(oResponse));
}
callback(null, oResponse);
}
//Send POST request.
fetch(getFetchURL(), getFetchOptions())
.then(handleFetchStatus)
.then(handleFetchBody)
.catch(function(error) {
callback(error);
});
我遇到的问题是 'webinarKey',一个很长的数字,被从“5653814518315977731”截断为“5653814518315978000”。我相信是 json() 函数没有处理大量数据。
我该如何阻止它?
我认为我需要在使用 json() 之前将 webinarKey 转换为字符串,但我不确定如何访问该对象的所有元素。在获取响应中甚至可能吗?
与JavaScript中的精度位数有关。在 JavaScript 中,所有数字都存储为浮点数,这就像以 2 为基数而不是以 10 为基数的科学记数法。有固定数量的位(在本例中为 53)可用于表示 a
在 a * (2 ** b)
。如果您查看 Number.MAX_SAFE_INTEGER
,可以用 53 位精度表示的最大整数,您会看到它有 16 个以 10 为基数的数字。您的号码是 19。如果您只是将号码输入 JavaScript 控制台,您会看到它打印出四舍五入的版本(精度为 16 位)。如果您需要存储这么大的数字,通常最好将它们存储为字符串。