【问题标题】:Android reverse money input with fixed decimal固定小数的Android反向货币输入
【发布时间】:2015-10-06 16:01:12
【问题描述】:

我想创建一个 Eddittext 以从左到右输入 2 位小数的货币值。如果没有值,则显示 0.00,并且当用户键入时,文本应根据以下规则更改:

我已经尝试使用 TextWatcher 来完成它,就像在类似的问题中一样,但我无法完成它,因为它在更新文本后一直调用 TextWatcher。

【问题讨论】:

  • 你想要什么输出?
  • 我会更新我的问题,明确它是一个 Edittext,我希望文本在用户输入时格式化。
  • 好的..我有你的问题会尽快发布我的答案。

标签: android android-edittext format textwatcher android-textwatcher


【解决方案1】:

我终于得到了它,就像我想要的那样使用 TextWatcher 和这段代码,希望它可以帮助某人:

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if ((count - before) > 0) {
                String text = s.toString().replace(',', '.');
                text = text.replace("..", ".");
                if (text.equals(".")) {
                    text = "0,00";
                    amount_field.setText(text);
                    amount_field.setSelection(2);

                } else {
                    int counter = 0;
                    for (int i = 0; i < text.length(); i++) {
                        if (text.charAt(i) == '.') {
                            counter++;
                            if (counter > 1) {
                                break;
                            }
                        }
                    }

                    if (counter > 1) {
                        StringBuilder sb = new StringBuilder(text);
                        sb.deleteCharAt(start);
                        amount_field.setText(sb.toString().replace('.', ','));
                        amount_field.setSelection(start);

                    } else {
                        Float value = Float.valueOf(text);
                        String result = String.format("%.2f", value);
                        amount_field.setText(result.replace('.', ','));
                        if (start != result.length()) {
                            amount_field.setSelection(start + 1);
                        } else {
                            amount_field.setSelection(start);
                        }
                    }
                }
            }
        }

【讨论】:

    【解决方案2】:

    试试这个:

    String yourStringToPutIntoTextView = String.format("%.2f", YourFloat);
    

    这里是一个例子:

    List<Float> listTestValue = new ArrayList<Float>();
    listTestValue.add(new Float(10));
    listTestValue.add(new Float(10.10));
    listTestValue.add(new Float(1010));
    listTestValue.add(new Float(0));
    listTestValue.add(new Float(0.9));
    listTestValue.add(new Float(.12));
    listTestValue.add(new Float(0.01));
    for(Float f : listTestValue)
    {
        String s = String.format("%.2f", f);
        System.out.println(s);
    }
    

    如果你没有f = 0的输入格式字符串,像这样:

    String noInput = String.format("%.2f", (float)0);
    

    注意数值必须是Float!

    输出:

    10,00

    10,10

    1010,00

    0,00

    0,90

    0,12

    0,01

    【讨论】:

    • 感谢您的回答,但我要求在您在 Edittext 中键入值时修改值,而不是具有输入和输出的函数。
    • 是的,但是您可以更改 EditText 上的值已更改,使用此方法,如果您对此没有任何想法,我可以为您更新代码
    • 它作为一个带有输入和输出的函数工作得很好,但是在处理 Edittext 中的 Textwatcher 时,在更改文本后放置光标会出现问题,无限循环等等。
    猜你喜欢
    • 2014-08-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 2018-01-25
    • 1970-01-01
    • 2017-11-10
    相关资源
    最近更新 更多