【antd + vue】InputNumber 数字输入框 输入限制

 一、需求说明

  1. 只能输入数字和小数点,保留小数点后两位;
  2. 最多输入6位;
  3. 删除所有内容时,默认为0;

二、问题说明

问题1:使用 precision 数值精度 时,超出规定小数位数时会自动四舍五入;

问题2:使用 maxlength 最大长度 时,数值精度失效;

三、解决方法

(一)完整代码

<a-table
  rowKey="sort"
  :columns="scoreInfo.columns"
  :data-source="scoreInfo.dataSource"
  :loading="scoreInfo.loading"
  :pagination="false"
  class="score-rubric"
  :scroll="{ y: 280 }"
>
  <template #action="{ record }">
    // 数字输入框
    <a-input-number
      v-model:value="record.scoreTeacher"
      :min="0"
      :max="parseFloat(record.score)"
      :step="0.01"
      @change="totalSumNum"
      :formatter="value => `${value}`"
      :parser="value => value?value.replace(/[^0-9.]/g, 0).replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g, '$1'):0 "
      :maxlength="6"
    />
  </template>
</a-table>
<div class="sum">总得分:{{ scoreInfo.sum }}</div>


/**
 * @description: 总得分
 * @return {*}
 */
  const totalSumNum = () => {
  let sumAll = 0;
  scoreInfo.dataSource.forEach(item => {
    sumAll += +item.scoreTeacher;
  });
  scoreInfo.sum = sumAll.toFixed(2);
};

(二)使用到的部分属性说明

属性名说明类型默认值
formatter指定输入框展示值的格式function(value: number | string): string-
max最大值numberInfinity
min最小值number-Infinity
parser指定从 formatter 里转换回数字的方式,和 formatter 搭配使用function( string): number-
precision数值精度number-
step每次改变步数,可以为小数number|string1
value(v-model)当前值number

(三)使用到的正则说明

1、不四舍五入

value.replace(/^\D*(\d*(?:\.\d{0,4})?).*$/g,'$1')

2、限制输入:只能输入“0123456789.

value.replace(/[^0-9.]/g, 0)

四、效果展示

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值