将EditText格式化为整数的货币

nin*_*nge 3 java formatting android android-edittext

全部 - 我有一个TextWatcher格式化EditText为货币格式:

private String current = "";
public void onTextChanged(CharSequence s, int start, int before, int count) {
    if(!s.toString().equals(current)){
        editText$.removeTextChangedListener(this);

       String cleanString = s.toString().replaceAll("[$,.]", "");

       double parsed = Double.parseDouble(cleanString);           
       String formated = NumberFormat.getCurrencyInstance().format((parsed/100));          

       current = formated;
       editText$.setText(formated);
       editText$.setSelection(formated.length());

       editText$.addTextChangedListener(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

这很好用,问题是我EditText只需要整数,所以我不是用户能够输入美分.因此,与12.34相比,我想要的不是0.1比0.12而不是1.23.如何摆脱小数点但保留逗号?谢谢.

Hex*_*xar 8

如果你不介意删除句点和尾随零,你可以这样做:

    mEditText.addTextChangedListener(new TextWatcher() {
        private String current = "";

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (!s.toString().equals(current)) {
                annualIncomeEntry.removeTextChangedListener(this);

                String cleanString = s.toString().replaceAll("[$,]", "");

                if (cleanString.length() > 0) {
                    double parsed = Double.parseDouble(cleanString);
                    NumberFormat formatter = NumberFormat.getCurrencyInstance();
                    formatter.setMaximumFractionDigits(0);
                    current = formatter.format(parsed);
                } else {
                    current = cleanString;
                }


                annualIncomeEntry.setText(current);
                annualIncomeEntry.setSelection(current.length());
                annualIncomeEntry.addTextChangedListener(this);
            }
        }

        @Override
        public void afterTextChanged(Editable s) {
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }
    });
Run Code Online (Sandbox Code Playgroud)

这会将数字格式化程序的最大小数位数设置为零,删除所有尾随零和周期.我还将除法除以100,以便所有输入的数字都是整数.

还要确保EditText的inputType是"number",否则如果用户尝试输入非数字字符,这将会崩溃.