NativeBase Progress组件算术转换精度丢失错误求助
React Native + NativeBase Progress组件Android精度丢失错误
错误信息
(NOBRIDGE) ERROR Warning: Error: Exception in HostFunction: Loss of precision during arithmetic conversion: (long) 7.000000000000001
复现代码
import React from "react"; import { NativeBaseProvider, Progress } from "native-base"; export default function App() { return ( <NativeBaseProvider> <Progress value={7} /> </NativeBaseProvider> ); }
依赖版本
{ "dependencies": { "expo": "~52.0.23", "native-base": "^3.4.28", "react": "18.3.1", "react-native": "0.76.5", "react-native-safe-area-context": "4.12.0", "react-native-svg": "15.8.0" } }
问题分析
NativeBase的Progress组件在Android端会将传入的value解析为带精度误差的浮点数(比如整数7被处理为7.000000000000001),而组件的Android原生实现预期接收精确的long类型整数,导致类型转换时出现精度丢失异常,该问题已在Android模拟器复现。
解决方案
- 强制传递整数类型值:如果
value是静态整数,直接传入整数字面量;如果是动态计算值,通过Math.floor()或Math.round()确保其为整数:// 静态场景直接传整数 <Progress value={7} /> // 动态计算场景做转换 <Progress value={Math.round(calculatedValue)} /> - 手动校验精度:对动态生成的
value先做整数判断,再处理后传递:const safeValue = Number.isInteger(dynamicValue) ? dynamicValue : Math.floor(dynamicValue); <Progress value={safeValue} /> - 升级NativeBase版本:该问题大概率是旧版本的组件实现bug,尝试升级到NativeBase的最新稳定版,官方可能已修复精度处理逻辑。
内容的提问来源于stack exchange,提问作者Aleks
相关产品推荐
相关产品推荐

