废话不多说,直接上代码
<el-input
v-model.number="scope.row.agentMount"
type="number"
maxlength="10"
placeholder="请输入金额"
class="agentInput"
@blur="inputBlur(scope)"
@keyup.native="
scope.row.agentMount = onAgentInput(scope.row, 2, scope.$index)"
/>
//限制保留两个小数
onAgentInput(row, limit, index) {
let { agentMount } = row;
let str = agentMount.toString();
let len1 = str.substr(0, 1);
let len2 = str.substr(1, 1);
//如果第一位是0,第二位不是点,就用数字把点替换掉
if (str.length > 1 && len1 == 0 && len2 != '.') {
str = str.substr(1, 1);
}
//第一位不能是.
if (len1 == '.') {
str = '';
}
//限制只能输入一个小数点
if (str.indexOf('.') != -1) {
let str_ = str.substr(str.indexOf('.') + 1);
if (str_.indexOf('.') != -1) {
str = str.substr(0, str.indexOf('.') + str_.indexOf('.') + 1);
}
}
//正则替换
// str = str.replace(/[^\d^\.]+/g, ''); // 保留数字和小数点
str = str.replace(/[^\-?\d.]/g, '');
str = str.replace(/\.\d{2,}$/, str.substr(str.indexOf('.'), 3));
// if (limit / 1 === 1) {
// str = str.replace(/^\D*([0-9]\d*\.?\d{0,1})?.*$/, '$1'); // 小数点后只能输 1 位
// } else {
// str = str.replace(/^\D*([0-9]\d*\.?\d{0,2})?.*$/, '$1'); // 小数点后只能输 2 位
// }
this.$set(this.tableData1, index, { ...row, agentMount: str });
return str;
},
亲测好用,放心食用吧~
如果有需要数值相加可能会遇到相加结果小数点后面会出现很多位数
那是浮点计算的bug
直接使用toFixed(2)
函数把结果保留小数点后两位就好啦
今天也是努力搬砖的小花🌸吖~
就酱!啾咪💜~