Android 数值型字符串,转化保留两位小数

代码:

        String s = "12345.67890";
        float f= Float.parseFloat(s);
        DecimalFormat decimalFormat=new DecimalFormat(".00");//构造方法的字符格式这里如果小数不足2位,会以0补足.
        String p=decimalFormat.format(f);//format 返回的是字符串
     

p值 : 12345.68


EditText输入价格,保留两位小数,最大价格小于10万,代码:

方法一

  /**
     * 设置限制小数点最多两位,最大5位数
     */
    public void setPricePoint(final EditText editText) {


        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count){
                Editable edt = editText.getText();
                String temp = edt.toString();
                int posDot = temp.indexOf(".");//返回指定字符在此字符串中第一次出现处的索引
                if (posDot <= 0) {//不包含小数点
                    if (temp.length() <= 5) {
                        return;//小于五位数直接返回
                    } else {
                        edt.delete(5, 6);//大于五位数就删掉第六位(只会保留五位)
                        return;
                    }
                }else if (posDot>5){
                    edt.delete(start,start-before+count);//小数点前,大于5位数整数,删除后面添加的数值
                    
                }
                if (temp.length() - posDot - 1 > 2)//如果包含小数点
                {
                    edt.delete(posDot + 3, posDot + 4);//删除小数点后的第三位
                }

                if (s.toString().contains(".")) {
                    if (s.length() - 1 - s.toString().indexOf(".") > 2) {
                        s = s.toString().subSequence(0, s.toString().indexOf(".") + 3);
                        editText.setText(s);
                        editText.setSelection(s.length());
                    }
                }
                if (s.toString().trim().substring(0).equals(".")) {
                    s = "0" + s;
                    editText.setText(s);
                    editText.setSelection(2);
                }

                if (s.toString().startsWith("0") && s.toString().trim().length() > 1) {
                    if (!s.toString().substring(1, 2).equals(".")) {
                        editText.setText(s.subSequence(0, 1));
                        editText.setSelection(1);
                        return;
                    }
                }
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void afterTextChanged(Editable s) {
            }

        });
//        editText.addTextChangedListener(new TextWatcher() {
//            @Override
//            public void onTextChanged(CharSequence s, int start, int before, int count){
//                Editable edt = editText.getText();
//                String temp = edt.toString();
//                int posDot = temp.indexOf(".");//返回指定字符在此字符串中第一次出现处的索引
//                if (posDot <= 0) {//不包含小数点
//                    if (temp.length() <= 5) {
//                        return;//小于五位数直接返回
//                    } else {
//                        edt.delete(5, 6);//大于五位数就删掉第六位(只会保留五位)
//                        return;
//                    }
//                }else {
//                    Log.e("feifei",editText.getText().toString()+"e");
//
//                }
//                if (temp.length() - posDot - 1 > 2)//如果包含小数点
//                {
//                    if (temp.length() - posDot - 1 < 5){
//                        edt.delete(posDot + 3, posDot + 4);//删除小数点后的第三位
//
//                    }else {
//                        edt.delete(start,start-before+count);
                        edt.delete(posDot + 3, posDot + 4);//删除小数点后的第三位
//
//                    }
//                    Log.e("feifei",editText.getText().toString()+"aaaaa");
//
//                }else {
//                    Log.e("feifei",editText.getText().toString()+"ee");
//
//                }
//
//                if (s.toString().contains(".")) {
//                    if (s.length() - 1 - s.toString().indexOf(".") > 2) {
//                        if (s.length() - 1 - s.toString().indexOf(".")<=5){
//                            s = s.toString().subSequence(0, s.toString().indexOf(".") + 3);
//                            editText.setText(s);
//                            editText.setSelection(s.length());
//                        }else {
                            s = s.toString().subSequence(0, s.toString().indexOf(".") + 3);
//                            editText.setText("");
                            editText.setSelection(s.length());
//                        }
//                        Log.e("feifei",editText.getText().toString()+"aaa");
//
//
//                    }
//                }
//                if (s.toString().trim().substring(0).equals(".")) {
//                    s = "0" + s;
//                    editText.setText(s);
//                    editText.setSelection(2);
//                    Log.e("feifei",editText.getText().toString()+"aa");
//                }else {
//                    Log.e("feifei",editText.getText().toString()+"eee");
//
//                }
//
//                if (s.toString().startsWith("0") && s.toString().trim().length() > 1) {
//                    if (!s.toString().substring(1, 2).equals(".")) {
//                        editText.setText(s.subSequence(0, 1));
//                        editText.setSelection(1);
//                        Log.e("feifei",editText.getText().toString()+"a");
//                        return;
//                    }else {
//                        Log.e("feifei",editText.getText().toString()+"eeeeee");
//
//                    }
//                }
//            }
//
//            @Override
//            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//            }
//
//            @Override
//            public void afterTextChanged(Editable s) {
//            }
//
//        });
    }

方法二(正则语句):

    private boolean isRight(CharSequence charSequence){

        String reg = "^\\d{1,5}||\\d{1,5}+\\.||\\d{1,5}+\\.+\\d{1,2}$";//非零开头的最多带两位小数的数字
//                String reg = "^[0-9]+(.[0-9]{2})?$";
        Pattern pattern = Pattern.compile(reg);
        Matcher matcher = pattern.matcher(charSequence);
        boolean b = matcher.matches();
        return b;
    }

    private void setAddTextChangeWithEditText(final EditText editText){
        final EditText old_EditText = new EditText(this);
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int i, int i1, int i2) {
                if (s.length()==0){
                    return;
                }else {
                    old_EditText.setText(s);
                }
            }
            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                if (charSequence.length()<=0){
                    return;
                }
                boolean b = isRight(charSequence) ;
                if (b==true){
                    //合格
                }else {
                    if (old_EditText.getText().toString().length() > 0 ){
                        editText.setText(old_EditText.getText());
                        editText.setSelection(i+i1);

                    }else {
                        editText.setText("");
                    }
                }
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });
    }





评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值