HarmonyOS鸿蒙Next中服务器返回的Json数据中Long类型转ArkTS的number失去精度
HarmonyOS鸿蒙Next中服务器返回的Json数据中Long类型转ArkTS的number失去精度 服务器返回的Json数据中Long类型转Ark TS的number失去精度。怎么才能保持数据的精度?
这个是JavaScript语言特性导致。 3种方案:
- 接口返回的时候,返回字符串。
- 使用BigInt类型:文档地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-json-V5#jsonparse
三方库处理大数值精度,可以参考:[https://ohpm.openharmony.cn/#/cn/detail/@ohmos%2Fjson-bigint](https://ohpm.openharmony.cn/#/cn/detail/@ohmos%2Fjson-bigint) 非常抱歉,确实漏了
let options: JSON.ParseOptions = {
bigIntMode: JSON.BigIntMode.PARSE_AS_BIGINT,
}
let numberText = '{"largeNumber":112233445566778899}';
let numberObj = JSON.parse(numberText,(key: string, value: Object | undefined | null): Object | undefined | null => {
if(key === "largeNumber") return value;
return value;
},options) as Object;
console.info((numberObj as object)?.["largeNumber"]);
// 输出: 112233445566778899
更多关于HarmonyOS鸿蒙Next中服务器返回的Json数据中Long类型转ArkTS的number失去精度的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,服务器返回的Json数据中的Long类型在转换为ArkTS的number类型时可能会失去精度。这是因为JavaScript的number类型是基于IEEE 754双精度浮点数标准,只能安全表示-2^53到2^53之间的整数。当Long类型的值超出这个范围时,转换过程中就会丢失精度。
ArkTS是基于TypeScript的,而TypeScript的number类型与JavaScript的number类型一致,因此同样存在精度问题。为了解决这个问题,可以将Long类型作为字符串传递,并在ArkTS中使用字符串来处理大整数,以避免精度丢失。
在鸿蒙Next中,处理Json数据时,可以通过自定义序列化和反序列化逻辑来确保Long类型的值以字符串形式传递和接收。例如,使用JSON.stringify和JSON.parse时,可以指定reviver函数或replacer函数来确保Long类型值以字符串形式处理。
具体实现可以参考鸿蒙开发文档中的相关API,确保在数据转换过程中保持精度。