使EditText只显示两个小数位

时间:2012-02-17 05:55:21

标签: java android eclipse

我想在我的编辑文本中只显示两位小数,ofc我想在编辑文本中显示货币,但将其值限制为小数点后的2位数。

我看过一些使用正则表达式的解决方案,但我不想这样做。我被告知java支持一些可以做到这一点的内部库函数。任何人都可以给我提示或给我一些有效的代码。

此致

amount.setRawInputType(Configuration.KEYBOARD_12KEY);

         amount.addTextChangedListener(new TextWatcher() 
         {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // TODO Auto-generated method stub
                DecimalFormat formatVal = new DecimalFormat("##.##");
                String formatted = formatVal.format(s);
                amount.setText(formatted);

            }

4 个答案:

答案 0 :(得分:8)

您只需使用DecimalFormat

即可
DecimalFormat format = new DecimalFormat("##.##");
String formatted = format.format(22.123);
editText.setText(formatted);

您将EditText作为22.12

获得结果

答案 1 :(得分:3)

这是一个在输入编辑文本时限制用户的解决方案。

    InputFilter filter = new InputFilter() {
    final int maxDigitsBeforeDecimalPoint=2;
    final int maxDigitsAfterDecimalPoint=2;

    @Override
    public CharSequence filter(CharSequence source, int start, int end,
            Spanned dest, int dstart, int dend) {
            StringBuilder builder = new StringBuilder(dest);
            builder.replace(dstart, dend, source
                    .subSequence(start, end).toString());
            if (!builder.toString().matches(
                    "(([1-9]{1})([0-9]{0,"+(maxDigitsBeforeDecimalPoint-1)+"})?)?(\\.[0-9]{0,"+maxDigitsAfterDecimalPoint+"})?"

                    )) {
                if(source.length()==0)
                    return dest.subSequence(dstart, dend);
                return "";
            }

        return null;

    }
};

mEdittext.setFilters(new InputFilter[] { filter });
例如,12.22所以只允许输入前2位数字和小数点后2位数。

答案 2 :(得分:0)

您只需将setKeyListener()分配给EditText

myEditText.setKeyListener(DigitsKeyListener.getInstance(true,true));

返回一个DigitsKeyListener,它接受​​数字0到9,加上减号(仅在开头)和/或小数点(每个字段只有一个),如果指定的话。

答案 3 :(得分:0)

  

输入:

 mBinding.etPriceUpdate.setText = getString(R.string.txt_rupees) + " " + "%.2f".format(firstNum!!.toDouble() * secondNum.toDouble())

输出:

  

₹4567.54

这将格式化浮点数1.23456最多2个小数位,因为在格式化指令%.2f中我们在小数点后使用了两个,f表示浮点数,其中包括double和float数据类型。 Java。此处不要尝试对双精度字符使用“ d”,因为它用于格式化整数,并且在格式化指令中代表十进制。顺便说一下,这里有个问题,format()方法也将任意舍入数字。例如,如果要格式化1.99999(最多2个小数位),则它将返回2.0,而不是1.99,如下所示。