一种两位小数点数字输入的控制方法

最近很多地方用到了金额输入框,需要控制输入的金额,使其符合一定的条件,之前写过一种控制方法,自己项目上的输入金额要求都是一致的,所以这一种就可以搞定了。
这个方法控制的数字符合的要求如下:只能输入整数或者最多两位小数
有需要的小伙伴可以参考一下,话不多说,上代码:

先是一个正则,判断数字是否符合要求

    /**
     * 小数,最多两位小数,如:10.2, 0.25, 20
     * @param str
     */
    public static boolean isDecimalTwo(String str){
        return str.matches("^[1-9]\\d*(\\.\\d{0,2})?|0\\.(0[1-9]?|[1-9]\\d?)?$");
    }

再是一个输入监听,利用上面的正则动态改变不符合要求的数字,同时要避免进入死循环(我用了!temp.equals(s.toString()来控制)……

    /**
     * 数字输入监听
     */
    private class MyTextWatcher implements TextWatcher {

        private String temp;
        private EditText et;

        public MyTextWatcher(EditText editText) {
            this.et = editText;
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            temp = s.toString();
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            //输第一个0时不判断
            if (s.length() > 0 && !"0".equals(s.toString())) {
                if (!isDecimalTwo(s.toString()) && !temp.equals(s.toString())) {
                    et.setText(temp);
                    et.setSelection(et.getText().toString().length());
                }
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    }

2017-08-17更新:

之前的写的正则还不够强大,导致在onTextChanged中需要加!"0".equals(s.toString())的判断。

现在优化了正则,允许最小数字0,0.00等0形式的输入,可以省去onTextChanged中累赘的判断,优化后的方法如下:

public static boolean isDecimalTwo(String str) {
        return str.matches("^[1-9]\\d*(\\.\\d{0,2})?|0(\\.(\\d{1,2})?)?$");
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值