uni-app - 微信小程序中,使用 navigateTo 传递非常大的数字传参精度丢失的问题
文章目录
- 🍉原因分析:JavaScript 数值精度限制
- 🍉常用解决方法
- 🍉代码示例
- 🍉官方推荐与最佳实践
- 🍉微信小程序环境注意事项
🍉原因分析:JavaScript 数值精度限制
微信小程序(uni-app)中,参数是通过 URL 查询字符串传递的,其本质上仍由 JavaScript 进行处理。JavaScript 的 Number 类型采用 IEEE-754 双精度浮点数表示,只能安全地表示 −(2⁵³ −1) 到 (2⁵³ −1) 区间内的整数。超过这个范围(约 9.007×10^15)的大整数会发生四舍五入。比如示例中的 12873198273123123124 超出了安全整数范围,在计算机中会被舍入为近似值。 另外,微信小程序通过 navigateTo 传参时,所有参数最终都会作为字符串拼接到 URL 上,并在目标页面的 onLoad(options) 中以字符串形式接收。如果在接收时不慎将该字符串转换为 Number 类型(例如用 +options.x、parseInt 或 JSON.parse),那么此时才会触发精度丢失:超长数字转换为 Number 时即丢失精度。因此,问题根本在于 JavaScript 数值类型的精度限制,而非微信框架本身。
🍉常用解决方法
1: 字符串传递
在跳转时将大整数先转换为字符串再传递,目标页面以