繁体   English   中英

使 EditText 只显示两位小数

[英]making EditText to show only two decimal places

我想在我的编辑文本中只显示两个小数位,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);

            }

您可以简单地使用DecimalFormat

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

您将在EditText得到结果为22.12

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

    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 位。

输入:

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

输出:

4567.54 卢比

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

您只需要将setKeyListener()分配给您的EditText

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM