Input isNumberKey与截断的CIMAL组合,导致输入字段中出现异常舍入
正在发生的事情的视频: 输入10.2,然后截断似乎会立即将其四舍五入到10.19。我将此代码用于输入: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"
<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"
这可以防止小数位数和浮点小数位数不正确