Input isNumberKey与截断的CIMAL组合,导致输入字段中出现异常舍入

Input isNumberKey与截断的CIMAL组合,导致输入字段中出现异常舍入,input,truncate,Input,Truncate,正在发生的事情的视频: 输入10.2,然后截断似乎会立即将其四舍五入到10.19。我将此代码用于输入: <input type="number" name="inputVelocity" onkeypress="return isNumberKey(event)" onkeyup="return truncateDecimals(this, 2)" id="initialVelocity"

正在发生的事情的视频:

输入10.2,然后截断似乎会立即将其四舍五入到10.19。我将此代码用于输入:

<input type="number" name="inputVelocity" onkeypress="return isNumberKey(event)" onkeyup="return truncateDecimals(this, 2)" id="initialVelocity" class="reset_form" value="10" step="0.01" required>

我尝试删除步骤和值编号,但这并没有解决问题。因此,问题可能出在脚本中:

function isNumberKey(evt) {
  let charCode = (evt.which) ? evt.which : evt.keyCode;
  if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 46) {
    evt.preventDefault();
    return false;
  }
  return true;
}

function truncateDecimals(obj, decimals) {
  if (obj.value % Math.round(obj.value)) {

    let divisor = Math.pow(10, decimals);
    obj.value = Math.floor(obj.value * divisor) / divisor;
  }

  console.log(obj.value);
  return true;
}
函数isNumberKey(evt){
让charCode=(evt.which)?evt.which:evt.keyCode;
如果(字符码>31&(字符码<48 | |字符码>57)&&charCode!=46){
evt.preventDefault();
返回false;
}
返回true;
}
函数截断小数(obj,小数){
if(目标值%Math.round(目标值)){
设除数=Math.pow(10,小数);
obj.value=数学下限(obj.value*除数)/除数;
}
控制台日志(对象值);
返回true;
}

谢谢你的帮助。这已经困扰了几天了。

我有一个答案可以解决这个问题:

删除truncateDecimals函数并替换为:

let validate = function(e) {
  let t = e.value;
  e.value = (t.indexOf(".") >= 0) ? (t.substr(0, t.indexOf(".")) + t.substr(t.indexOf("."), 3)) : t;
}
onkeyup=“return truncateDecimals(this,2)”
替换为:

oninput="validate(this)" 
type="text"
并将
type=“number”
替换为:

oninput="validate(this)" 
type="text"
这可以防止小数位数和浮点小数位数不正确