HarmonyOS鸿蒙Next中使用axios进行网络请求,当返回结果中数据含有超长数字时,数字会被科学计数处理

HarmonyOS鸿蒙Next中使用axios进行网络请求,当返回结果中数据含有超长数字时,数字会被科学计数处理

3 回复

axios 内部会对后端返回的数据进行 JSON.parse 的操作,JSON.parse会导致超长数字的精度丢失,可以通过重写transformResponse方法,修改返回数据,导入json-bigint包,使用JsonBigInt.parse(data)转换返回数据,试下demo

axios<string, AxiosResponse<string>, null>({
    url: 'https://www.xxx.com/info',
    method: 'get',
    responseType: 'array_buffer', 
    transformResponse:(data)=>{
      return JsonBigInt.parse(data)
    }
  }).then((res: AxiosResponse) => {
   // 处理请求成功的逻辑
  })

更多关于HarmonyOS鸿蒙Next中使用axios进行网络请求,当返回结果中数据含有超长数字时,数字会被科学计数处理的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中使用axios进行网络请求时,如果返回结果中的数字超长,可能会被科学计数法处理。这是因为JavaScript在处理超长数字时默认采用科学计数法来表示。要解决这个问题,可以在接收到数据后对数字进行处理,确保其以字符串形式保存,避免被自动转换为科学计数法。

具体操作可以在axios的响应拦截器中,对返回的数据进行遍历,判断是否为数字,如果是超长数字则将其转换为字符串。例如:

axios.interceptors.response.use(response => {
  const data = response.data;
  if (data && typeof data === 'object') {
    for (let key in data) {
      if (typeof data[key] === 'number' && data[key].toString().length > 15) {
        data[key] = data[key].toString();
      }
    }
  }
  return response;
}, error => {
  return Promise.reject(error);
});

这样可以确保返回的超长数字以字符串形式保存,避免科学计数法处理。

在HarmonyOS鸿蒙Next中使用axios进行网络请求时,如果返回的数据中含有超长数字,可能会被自动转换为科学计数法表示。为了避免这种情况,可以在接收到响应后对数据进行处理,将科学计数法的数字转换为字符串形式。例如:

axios.get('your-api-endpoint')
  .then(response => {
    const data = response.data;
    // 将科学计数法的数字转换为字符串
    if (typeof data.number === 'number') {
      data.number = data.number.toString();
    }
    console.log(data);
  })
  .catch(error => {
    console.error(error);
  });
回到顶部