HarmonyOS鸿蒙Next中后台传过来的18位number使用Axios会把最后三位四舍五入
HarmonyOS鸿蒙Next中后台传过来的18位number使用Axios会把最后三位四舍五入 第一个问题: 在postman中测试的数据为 { “order_id”: 316174100416, “money_type”: 3, “title”: “钢管”, “payment”: “微信支付”, “pay_status”: 1, “price”: 1, “pay_time”: “2021-11-08 11:23:26”, “is_invoice”: false }
在axios response打印为 { “order_id”: 316174100416, “money_type”: 3, “title”: “钢管”, “payment”: “微信支付”, “pay_status”: 1, “price”: 1, “pay_time”: “2021-11-08 11:23:26”, “is_invoice”: false } 最后三位被四舍五入了
第二个问题: 我bean类里的order_id定义为string类型,但是在Text中使用该数据会不显示,必须手动的Text(order_id +"")才会显示,是不是Text会把数字类型的字符串转为number型
更多关于HarmonyOS鸿蒙Next中后台传过来的18位number使用Axios会把最后三位四舍五入的实战教程也可以访问 https://www.itying.com/category-93-b0.html
建议你从后端传过来的order_id类型为string类型,防止出现精度丢失问题,测试数据中这个order_id类型并不是string类型,Text并不会有您说的这种情况,可能需要检查下您的代码具体类型是做的什么样得转换
ts语法没有long类型,用number处理大数据会出现精度丢失的情况,必要时可以使用bigint替换number。 例如:
let a: bigint = 316174180775100416n
更多关于HarmonyOS鸿蒙Next中后台传过来的18位number使用Axios会把最后三位四舍五入的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,使用Axios进行网络请求时,如果后台传过来的18位number在JavaScript中被处理,可能会出现最后三位四舍五入的情况。这是因为JavaScript的Number类型只能安全表示最大为9007199254740991(即2^53 - 1)的整数。超过这个范围的整数在JavaScript中会被近似处理,导致精度丢失。
要解决这个问题,可以使用字符串来处理大整数。具体方法是确保后台返回的18位number以字符串形式传递,而不是直接作为数字传递。在前端接收到数据后,继续保持其为字符串格式,避免将其转换为JavaScript的Number类型。
例如,可以在Axios请求的配置中设置responseType为'json',并在处理响应数据时确保大整数字段以字符串形式存在。如果后台返回的是JSON格式的数据,可以在JSON解析时使用reviver函数将大整数字段保持为字符串。
axios.get('/api/data', {
responseType: 'json'
}).then(response => {
const data = JSON.parse(response.data, (key, value) => {
if (key === 'largeNumberField') {
return value.toString(); // 将大整数字段保持为字符串
}
return value;
});
console.log(data.largeNumberField); // 输出字符串形式的18位number
});
通过这种方式,可以避免JavaScript对大整数的精度丢失问题,确保18位number的完整性和准确性。


