如何在imask.js中设置scale为3但最多补2位小数零?
解决方案
要实现「保留scale=3允许输入三位小数,但显示时最多补两位零」的需求,你需要调整原配置参数,并利用imask的postProcess钩子自定义格式化逻辑,具体配置如下:
{ mask: Number, signed: true, scale: 3, // 保留输入三位小数的能力 normalizeZeros: true, padFractionalZeros: false, // 关闭自动补零到scale位数 postProcess: function(value, masked) { if (typeof value !== 'number') return value; // 将数值转为字符串,避免toFixed的精度问题 let numStr = value.toString(); // 拆分整数和小数部分 let [integerPart, fractionalPart = ''] = numStr.split('.'); // 根据小数部分长度处理补零逻辑 if (fractionalPart.length === 0) { return `${integerPart}.00`; } else if (fractionalPart.length === 1) { return `${integerPart}.${fractionalPart}0`; } else { // 小数部分长度为2或3时直接返回原字符串 return numStr; } } }
逻辑说明
- 保留
scale: 3:确保用户可以输入最多三位小数(比如4.567会被正确保留) - 关闭
padFractionalZeros: false:阻止imask自动补零到3位小数 postProcess钩子:在数值格式化后自定义显示规则:- 整数(如4)→ 补两位零变为
4.00 - 一位小数(如4.5)→ 补一位零变为
4.50 - 两位小数(如4.56、4.50)→ 直接保留原格式
- 三位小数(如4.567)→ 直接保留原格式
- 整数(如4)→ 补两位零变为
这样既满足了输入时允许三位小数的需求,又实现了你要的显示补零规则。
内容的提问来源于stack exchange,提问作者Oki
相关产品推荐
相关产品推荐

