You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript限制两位小数输入功能在输入多个小数零时失效求修复

原代码的问题出在用数值相等来判断合法性——当输入100.000000000这类末尾带多个零的数值时,它的实际数值和100或100.00完全相等,导致原判断条件不触发,没法限制小数位数。

这里给你两种修复方案:

方案一:精准限制小数位数(恢复上一次合法值)

直接检查输入字符串的小数部分长度,一旦超过两位就恢复到上一次的合法输入:

function restrict(tis) {
  const prev = tis.getAttribute("data-prev") || "";
  const currentValue = tis.value.trim();
  
  if (!currentValue) {
    tis.setAttribute("data-prev", "");
    return;
  }
  
  const dotIndex = currentValue.indexOf(".");
  // 存在小数点且小数部分长度超过2位时,恢复上一次值
  if (dotIndex !== -1 && currentValue.length - dotIndex - 1 > 2) {
    tis.value = prev;
  } else {
    tis.setAttribute("data-prev", currentValue);
  }
}
<input type="number" name="amount" step="any" oninput="restrict(this);" required>

方案二:自动格式化输入(实时修正为两位小数)

如果希望输入后自动修正为合法格式,不需要手动删除多余零,可以用这种方式,输入100.000000会直接变成100.00:

function restrict(tis) {
  let value = tis.value.trim();
  if (!value) {
    tis.setAttribute("data-prev", "");
    return;
  }
  
  const num = parseFloat(value);
  if (!isNaN(num)) {
    // 保留两位小数,自动格式化
    tis.value = num.toFixed(2);
    // 如果你希望100.00显示为100,可以替换成下面这行
    // tis.value = (Math.round(num * 100) / 100).toString();
  }
  tis.setAttribute("data-prev", tis.value);
}
<input type="number" name="amount" step="any" oninput="restrict(this);" required>

内容的提问来源于stack exchange,提问作者elliot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:30:58