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.如何摆脱小数点但保留逗号?谢谢.
如果你不介意删除句点和尾随零,你可以这样做:
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",否则如果用户尝试输入非数字字符,这将会崩溃.
| 归档时间: |
|
| 查看次数: |
3547 次 |
| 最近记录: |