android 金额输入框(小数点后两位)

先看下效果图,这里写图片描述

界面中有我自己做的个数字输入键盘。
思考:对于金额的合法性考虑,列举所有金额不合法的情况。
1.不能以”.”开头;
2.以”0”开头的话,后面必须跟上”.”;
3.小数点后有且有两位小数;
4.有且有一个小数点;

直接看代码:

//num是输入框中的值,etNum是输入框,numBoardView是自定义的数字键盘
private void checknum(String num) {
            if (num.length()==1){
                //不能以"."开头
                if (".".equals(num)){
                    etNum.setText("");
                    //回调提示内容是空
                    numBoardView.deleteSubStringBuffer(0, num.length());
                }else{
                    etNum.setText(num);
                }
            }else if ("".equals(num)){
                etNum.setText(num);
            }
            else{
                String first=num.substring(0,1);
                String second=num.substring(1,2);
                //
                if ("0".equals(first)&&!".".equals(second)){
                    //第一位是"0",第二位必须是"."
                    etNum.setText("0");
                    //回调删除数字键盘内的buffer
                   numBoardView.deleteSubStringBuffer(1,2);
                }else {
                    int pointSize=0;
                    for (int i=0;i<num.length();i++){
                        //得到小数点
                        String str=num.substring(i,i+1);
                        if (num.substring(i,i+1).equals(".")){
                            pointSize++;
                        }
                    }
                    if(pointSize==1){
                        int firstPointLocation=num.indexOf(".");
                        if (firstPointLocation<num.length()-1){
                            //小数点后有且只有两位
                            if (num.length()-1-firstPointLocation>=3){
                                //小数点已经两位了
                                etNum.setText(num.substring(0,num.length()-1));
                                numBoardView.deleteSubStringBuffer(num.length()-1,num.length());
                            }else{
                                etNum.setText(num);
                            }
                        }else{
                            etNum.setText(num);
                        }
                    } else if (pointSize>=2){
                        //两个小数点
                        etNum.setText(num.substring(0,num.length()-1));
                        numBoardView.deleteSubStringBuffer(num.length()-1,num.length());
                    }else{
                        etNum.setText(num);
                    }
                }
            }
        }

逻辑就是这个样子,里面的代码改下就可以,主要是记得金额的不合法有那先限制就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章