You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在EditText中限制小数点后的输入位数?

DecimalDigitsInputFilter 不属于Android官方SDK内置类,因此直接调用会出现未解析引用报错。要实现「输入总长度最多7位、小数位最多保留2位」的限制,可按以下步骤实现:

方案:自定义InputFilter实现小数位数限制

先实现自定义的小数位数过滤类:

import android.text.InputFilter
import android.text.Spanned
import java.util.regex.Pattern

class DecimalDigitsInputFilter(private val decimalDigits: Int) : InputFilter {
    private val pattern: Pattern = Pattern.compile(
        "^[0-9]*+\\.?[0-9]{0,$decimalDigits}$"
    )

    override fun filter(
        source: CharSequence?,
        start: Int,
        end: Int,
        dest: Spanned?,
        dstart: Int,
        dend: Int
    ): CharSequence? {
        val input = dest.toString().substring(0, dstart) + source.toString().substring(start, end) + dest.toString().substring(dend)
        return if (pattern.matcher(input).matches()) {
            // 符合规则不拦截输入
            null
        } else {
            // 不符合规则拦截本次输入
            ""
        }
    }
}

之后就可以直接用你原有逻辑设置过滤规则:

editText.filters = arrayOf<InputFilter>(
    InputFilter.LengthFilter(7), 
    DecimalDigitsInputFilter(2)
)

补充说明

如果需要同时限制整数部分位数,可修改自定义Filter的正则规则,比如限制整数部分最多5位、小数2位,可将正则改为^[0-9]{0,5}+\\.?[0-9]{0,2}$即可。

内容的提问来源于stack exchange,提问作者GrandPC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 01:18:03