Edittext限制小数后俩位,输入“.”自动补充0

参考:Edittext限制小数后俩位,输入“.”自动补充0


import android.text.SpannableStringBuilder
import android.text.Spanned
import android.text.method.DigitsKeyListener

/**
 * EditText 输入的数字格式化
 */
class NumberValueFilter : DigitsKeyListener(false, true) {
    /**
     * 小数位数
     */
    private var digits = 18
    fun setDigits(d: Int): NumberValueFilter {
        digits = d
        return this
    }

    override fun filter(source: CharSequence, start: Int, end: Int, dest: Spanned, dstart: Int, dend: Int): CharSequence {
        var newSource=source
        var newStart = start
        var newEnd = end
        val out = super.filter(newSource, newStart, newEnd, dest, dstart, dend)
        if (out != null) {
            newSource = out
            newStart = 0
            newEnd = out.length
        }
        val len = newEnd - newStart
        if (len == 0) {
            return newSource
        }
        if (newSource.toString() == "." && dstart == 0) {
            return "0."
        }
        if (newSource.toString() != "." && dest.toString() == "0") {
            return ""
        }
        val dlen = dest.length
        for (i in 0 until dstart) {
            if (dest[i] == '.') {
                return if (dlen - (i + 1) + len > digits) "" else SpannableStringBuilder(newSource, newStart, newEnd)
            }
        }
        for (i in newStart until newEnd) {
            if (newSource[i] == '.') {
                return if (dlen - dend + (newEnd - (i + 1)) > digits) "" else break
            }
        }
        return SpannableStringBuilder(newSource, newStart, newEnd)
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值