如上所述

- 发布:2025-06-24 14:57
- 更新:2025-06-24 20:27
- 阅读:80
产品分类: uniapp/App
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: macos 15.5
HBuilderX类型: 正式
HBuilderX版本号: 4.66
手机系统: Android
手机系统版本号: Android 12
手机厂商: 华为
手机机型: 所有
页面类型: vue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
示例代码:
操作步骤:
如上所述
如上所述
预期结果:
70.82 + 后 为 70.83
70.82 + 后 为 70.83
实际结果:
70.82 + 后 不变化
70.82 + 后 不变化
bug描述:
使用如下代码测试:
<uni-number-box v-model="form.price" :min="0.01" :max="100000" :step="0.01" :width="140"/>
你会发现当数字步进到70.82时,再按+号就不变化了,
同样的数字有70.96,也再按+号就不变化了,等等吧,没有一一测试,但是这两个数字是停住了。
同时还发现,当数值为70.82时,按减号-,发现直接到70.8,70.81去哪里了?



爱豆豆 - 办法总比困难多
看了下代码 发现是这个组件内把 value 转为了正整数 +1步进的
即this.inputValue scale 值为 70.82 100
刚好 值为70.82的时候 相乘后被变成了 7081.999999999999
此时+1 就变成了7082.999999999999
最后在输出时用了(Math.floor(7082.999999999999) / 100)把小数点后的截取掉了 结果又回到了 70.82 然后就选入了循环中
可以在代码中把 floor 改为 round 就可以正常步进了 但是不确定有没有其他的影响 可以等官方修复一下
把floor
this.inputValue = (Math.floor(value) / scale).toFixed(String(scale).length - 1);
改为round
this.inputValue = (Math.round(value) / scale).toFixed(String(scale).length - 1);
守护 (作者)
目前只使用app端,其它端没有测试
2025-06-24 15:08
DCloud_UNI_JBB
回复 守护: 麻烦发个可复现demo
2025-06-24 15:17
守护 (作者)
回复 DCloud_UNI_JBB: 已添加复现附件
2025-06-24 17:23