关于输入框输入2位小数的问题

发布于 2022-09-12 12:58:40 字数 471 浏览 25 评论 0

obj.value = obj.value.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
obj.value = obj.value.replace(/^\./g, ""); //验证第一个字符是数字
obj.value = obj.value.replace(/\.{2,}/g, "."); //只保留第一个, 清除多余的
obj.value = obj.value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3'); //只能输入两个小数

这样的代码我找了很多类似的,但是都会出现下面的问题:
image.png
请大神支招

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

薄荷梦 2022-09-19 12:58:40
obj.value = obj.value.replace(/^((-)?(\d+\.\d{2}).*|.*)$/, '$2$3')
风月客 2022-09-19 12:58:40

试试

parseFloat(number.toFixed(2));

或者

<input type="number" step="0.01">
我只土不豪 2022-09-19 12:58:40
this.num=Math.floor(this.num * 100) / 100;//保留两位小数,不四舍五入
this.num = this.num.toFixed(2)//保留两位小数,四舍五入
梦里寻她 2022-09-19 12:58:40

这个规则其实还是比较复杂的

  1. 只包括数字字符和小数点
  2. 最多有1个小数点
  3. 如果有小数点,则小数点后最多紧跟2个数字字符
  4. 小数点前可以有多位数字字符
  5. 除非后面紧跟小数点,否则首字符不能为0
  6. 小数点不能独立存在

这个判断不一定只能是一句规则式,其实可以多个判例一起用。

有一个近似简化的规则式/^\d+(\.\d{0,2})?$/,不过它不能保证上面的第5条规则

对于字符串替换处理,其实有一个取巧的方法:
在保证了只有小数点和数字等其他规则后,可以先用小数点把字符分成多个子字符串,
比如你的

iO="1.4444.2222.222";
iA=iO.split(".",2);
iN=iA.join(".");
// 这样处理后,肯定最多只有一个小数点
// 至于保留2位小数,因为没有具体规则,所以不好具体实现

此外如果这个数是输入的,其实在输入过程中就依次处理,基本可以保证不能输入这样的情况,但粘贴的可能还是出现,所以要最终处理

我爱人 2022-09-19 12:58:40

重新赋值会导致光标位置异常的问题,尤其是删除其中某个字符的时候,不太好控制。
最好的是方式是 两个inpit框做整数类型处理,中间加个外置小数点。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文