一、需求说明
- 只能输入数字和小数点,保留小数点后两位;
- 最多输入6位;
- 删除所有内容时,默认为0;
二、问题说明
问题1:使用 precision 数值精度 时,超出规定小数位数时会自动四舍五入;
问题2:使用 maxlength 最大长度 时,数值精度失效;
三、解决方法
(一)完整代码
<a-tablerowKey="sort":columns="scoreInfo.columns":data-source="scoreInfo.dataSource":loading="scoreInfo.loading":pagination="false"class="score-rubric":scroll="{ y: 280 }"
><template #action="{ record }">// 数字输入框<a-input-numberv-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 | 最大值 | number | Infinity |
min | 最小值 | number | -Infinity |
parser | 指定从 formatter 里转换回数字的方式,和 formatter 搭配使用 | function( string): number | - |
precision | 数值精度 | number | - |
step | 每次改变步数,可以为小数 | number|string | 1 |
value(v-model) | 当前值 | number |
(三)使用到的正则说明
1、不四舍五入
value.replace(/^\D*(\d*(?:\.\d{0,4})?).*$/g,'$1')
2、限制输入:只能输入“0123456789.”
value.replace(/[^0-9.]/g, 0)