axios网络请求,大数字类型数据精度丢失 - HarmonyOS 鸿蒙Next

发布于 1周前 作者 h691938207 最后一次编辑是 5天前 来自 鸿蒙OS

axios网络请求,大数字类型数据精度丢失 - HarmonyOS 鸿蒙Next

目前,后端的请求返回数据中存在Id为19位的大数字类型,通过axios请求后会丢失精度,查询得知可以用axios的transformResponse搭配json-bigint库进行类型转换,可是网上都是js、ts的示例代码,arkTs是必须指定显式类型的,我编写了一下的代码,debug可知,result是个object类型,且里面的Id值已经变为bigint类型(xxxxxxxxxxxxxxxxxxxxxxxn的样式)。但是就是返回后,axios的拦截器不打印响应信息,可知中间应该是出错了,但是我不太清楚是哪里的错误,有大神了解这方面的问题吗?

try中的result就是转换过的,我debug看了一下,跟下面的result基本一致,只是Id字段变为了xxxxxxxxxxxxxxn的形式,应该就是bigint,但是就是return后不起效果,不打印响应信息了。

return await axios.get<T, AxiosResponse<T>, null>(constant.BASE_URL + urlName, {
params: query, transformResponse: (data: string) => {
try {
let result = JsonBigInt.parse(data) as object
return result
} catch (e) {
let result = JSON.parse(data)
return result
}
}
})

2 回复

在HarmonyOS鸿蒙Next开发环境中,使用axios进行网络请求时,若遇到大数字类型数据精度丢失的问题,这通常是由于JavaScript在处理大数字时的精度限制导致的。JavaScript的Number类型是基于IEEE 754双精度浮点数表示的,其精度有限,无法准确表示超过安全整数范围(±9007199254740991)的整数。

要解决这个问题,可以考虑以下几种方法:

  1. 使用字符串格式传输:将大数字转换为字符串格式进行传输,接收后再转换为数字类型,这样可以避免在传输过程中的精度丢失。

  2. 使用BigInt:如果环境支持,可以考虑使用BigInt类型来处理大数字,它提供了任意精度的整数运算。

  3. 服务器端处理:在服务器端对大数字进行特殊处理,如转换为字符串或采用其他编码方式,确保客户端接收到的数据精度不受影响。

  4. JSON库支持:检查并升级axios或相关JSON处理库,确保它们能够正确处理大数字。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部