货币输入为2个十进制格式

米娜·法兹(Mina Fawzy)

我需要使用2个十进制格式示例格式化输入货币,当用户输入2时它看起来为$ 2.00,然后当用户输入2时它转换为$ 22.00 ...等等

我处理类似的事情,当用户输入2时它将转换为$ 0.02接下来的2将像这样$ 0.22

任何人都可以帮助我,谢谢

public class MoneyTextWatcher implements TextWatcher {
    private final WeakReference<EditText> editTextWeakReference;

    public MoneyTextWatcher(EditText mEditText) {
        editTextWeakReference = new WeakReference<EditText>(mEditText);
    }

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

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

       EditText editTex = editTextWeakReference.get();
        if(!s.toString().equals(editTex.getText())) {
            editTex.removeTextChangedListener(this);
            String cleanString = s.toString().replaceAll("[$,.]", "");
            double parsed = Double.parseDouble(cleanString.replaceAll("[^\\d]", ""));
            String formatted = NumberFormat.getCurrencyInstance().format((parsed / 100));
            editTex.setText(formatted);
            editTex.setSelection(formatted.length());

            editTex.addTextChangedListener(this);

    }

    @Override
    public void afterTextChanged(Editable s) {

    }


    }
}
银行

我认为您可以尝试以下方法:

布局:

<EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        />

活动:

EditText editText = (EditText) findViewById(R.id.editText);
editText.addTextChangedListener(new NumberTextWatcher(editText, "#,###"));

使用文本观察器,如下所示:

public class NumberTextWatcher implements TextWatcher {

    private final DecimalFormat df;
    private final DecimalFormat dfnd;
    private final EditText et;
    private boolean hasFractionalPart;
    private int trailingZeroCount;

    public NumberTextWatcher(EditText editText, String pattern) {
        df = new DecimalFormat(pattern);
        df.setDecimalSeparatorAlwaysShown(true);
        dfnd = new DecimalFormat("#,###.00");
        this.et = editText;
        hasFractionalPart = false;
    }

    @Override
    public void afterTextChanged(Editable s) {
        et.removeTextChangedListener(this);

        if (s != null && !s.toString().isEmpty()) {
            try {
                int inilen, endlen;
                inilen = et.getText().length();
                String v = s.toString().replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()), "").replace("$","");
                Number n = df.parse(v);
                int cp = et.getSelectionStart();
                if (hasFractionalPart) {
                    StringBuilder trailingZeros = new StringBuilder();
                    while (trailingZeroCount-- > 0)
                        trailingZeros.append('0');
                    et.setText(df.format(n) + trailingZeros.toString());
                } else {
                    et.setText(dfnd.format(n));
                }
                et.setText("$".concat(et.getText().toString()));
                endlen = et.getText().length();
                int sel = (cp + (endlen - inilen));
                if (sel > 0 && sel < et.getText().length()) {
                    et.setSelection(sel);
                } else if (trailingZeroCount > -1) {
                    et.setSelection(et.getText().length() - 3);
                } else {
                    et.setSelection(et.getText().length());
                }
            } catch (NumberFormatException | ParseException e) {
                e.printStackTrace();
            }
        }

        et.addTextChangedListener(this);
    }

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

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        int index = s.toString().indexOf(String.valueOf(df.getDecimalFormatSymbols().getDecimalSeparator()));
        trailingZeroCount = 0;
        if (index > -1) {
            for (index++; index < s.length(); index++) {
                if (s.charAt(index) == '0')
                    trailingZeroCount++;
                else {
                    trailingZeroCount = 0;
                }
            }
            hasFractionalPart = true;
        } else {
            hasFractionalPart = false;
        }
    }
}

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将十进制值格式转换为具有2个小数位的货币

来自分类Dev

以十进制格式表示的 2 个日期时间之间的差异(以小时为单位)

来自分类Dev

如何禁用货币输入掩码的十进制输入

来自分类Dev

如何根据十进制值格式化货币?

来自分类Dev

将十进制货币值舍入为美分倍数

来自分类Dev

仅当货币不是0.0000时才强制转换2个十进制值

来自分类Dev

用C#格式的十进制格式,至少2个小数位

来自分类Dev

在角度2中,如何将数字显示为两位十进制舍入的货币?

来自分类Dev

数字到单词货币十进制

来自分类Dev

十进制格式设置为零位

来自分类Dev

使用自定义格式将收到的长数字格式设置为十进制的十进制格式

来自分类Dev

2个十进制输入的双jQuery验证并获得更大的数字

来自分类Dev

使用错误的十进制分隔符在Android中格式化货币

来自分类Dev

如何使用PHP将十进制数字转换为单词(货币格式)?

来自分类Dev

格式化字符串中的十进制/货币

来自分类Dev

格式化十进制数据类型以显示货币

来自分类Dev

如何从GridView Eval中的SQL处理十进制的货币格式?

来自分类Dev

将十进制格式转换为货币 c# aspx 从 sql

来自分类Dev

正则表达式以货币格式替换十进制数和所有句点

来自分类Dev

Java - 如何使用货币格式将字符串转换为大十进制数

来自分类Dev

只允许输入3个十进制数

来自分类Dev

十进制格式,忽略十进制0

来自分类Dev

使用剃刀@ Html.textboxfor将字符串表示为货币或十进制

来自分类Dev

使用剃刀@ Html.textboxfor将字符串表示为货币或十进制

来自分类Dev

Java十进制格式错误的格式

来自分类Dev

如何将Web API十进制结果格式化为两个十进制空格

来自分类Dev

自动舍入得到2个十进制数字

来自分类Dev

以十进制格式转换小时

来自分类Dev

Python格式十进制接近零

Related 相关文章

  1. 1

    将十进制值格式转换为具有2个小数位的货币

  2. 2

    以十进制格式表示的 2 个日期时间之间的差异(以小时为单位)

  3. 3

    如何禁用货币输入掩码的十进制输入

  4. 4

    如何根据十进制值格式化货币?

  5. 5

    将十进制货币值舍入为美分倍数

  6. 6

    仅当货币不是0.0000时才强制转换2个十进制值

  7. 7

    用C#格式的十进制格式,至少2个小数位

  8. 8

    在角度2中,如何将数字显示为两位十进制舍入的货币?

  9. 9

    数字到单词货币十进制

  10. 10

    十进制格式设置为零位

  11. 11

    使用自定义格式将收到的长数字格式设置为十进制的十进制格式

  12. 12

    2个十进制输入的双jQuery验证并获得更大的数字

  13. 13

    使用错误的十进制分隔符在Android中格式化货币

  14. 14

    如何使用PHP将十进制数字转换为单词(货币格式)?

  15. 15

    格式化字符串中的十进制/货币

  16. 16

    格式化十进制数据类型以显示货币

  17. 17

    如何从GridView Eval中的SQL处理十进制的货币格式?

  18. 18

    将十进制格式转换为货币 c# aspx 从 sql

  19. 19

    正则表达式以货币格式替换十进制数和所有句点

  20. 20

    Java - 如何使用货币格式将字符串转换为大十进制数

  21. 21

    只允许输入3个十进制数

  22. 22

    十进制格式,忽略十进制0

  23. 23

    使用剃刀@ Html.textboxfor将字符串表示为货币或十进制

  24. 24

    使用剃刀@ Html.textboxfor将字符串表示为货币或十进制

  25. 25

    Java十进制格式错误的格式

  26. 26

    如何将Web API十进制结果格式化为两个十进制空格

  27. 27

    自动舍入得到2个十进制数字

  28. 28

    以十进制格式转换小时

  29. 29

    Python格式十进制接近零

热门标签

归档