守护
守护
  • 发布:2025-06-24 14:57
  • 更新:2025-06-24 20:27
  • 阅读:80

【报Bug】uni-number-box组件 有时候按+号不进行步进

分类:uni-app

产品分类: 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 + 后 不变化

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去哪里了?

2025-06-24 14:57 负责人:无 分享
已邀请:
DCloud_UNI_JBB

DCloud_UNI_JBB

其他端有问题吗?

  • 守护 (作者)

    目前只使用app端,其它端没有测试

    2025-06-24 15:08

  • DCloud_UNI_JBB

    回复 守护: 麻烦发个可复现demo

    2025-06-24 15:17

  • 守护 (作者)

    回复 DCloud_UNI_JBB: 已添加复现附件

    2025-06-24 17:23

守护

守护 (作者)

添加附件

爱豆豆

爱豆豆 - 办法总比困难多

看了下代码 发现是这个组件内把 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);
  • 守护 (作者)

    嗯,非常感谢,正如你所说。

    已经改写了那个逻辑

    2025-06-24 20:38

要回复问题请先登录注册