У меня есть EditText, в котором пользователь должен ввести число, включая десятичные числа, и я хочу, чтобы тысяча разделителей автоматически добавилась на номер ввода. Я попробовал несколько других методов, но некоторые из них разрешить номера с плавающей запятой, поэтому я придумал этот код, который хорошо работает только с тем, что ввод строки не редактируется в реальном времени до одного с возможными тысячами разделителей, и ошибки, похоже, связаны с s.replace();Как отформатировать номер в android EditText после редактирования в реальном времени
am2 = new TextWatcher(){
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {}
public void afterTextChanged(Editable s) {
if (s.toString().equals("")) {
amount.setText("");
value = 0;
}else{
StringBuffer strBuff = new StringBuffer();
char c;
for (int i = 0; i < amount2.getText().toString().length() ; i++) {
c = amount2.getText().toString().charAt(i);
if (Character.isDigit(c)) {
strBuff.append(c);
}
}
value = Double.parseDouble(strBuff.toString());
reverse();
NumberFormat nf2 = NumberFormat.getInstance(Locale.ENGLISH);
((DecimalFormat)nf2).applyPattern("###,###.#######");
s.replace(0, s.length(), nf2.format(value));
}
}
};
Большое спасибо .. это спасло мой день –
Как насчет того, если я хочу, чтобы пользователь мог ввести номер следующим образом: «1,234,05»? 'df = new DecimalFormat (" #, ###. ## ");' Этот формат не разрешает нули после запятой, но если я его сменил на 'df = new DecimalFormat (" #, ###. 0 # ");' он автоматически добавит ноль после запятой. Ну, вы можете добавить другое состояние типа «isFractionalPartThere» и проанализировать его с помощью 'dfdot = new DecimalFormat (« #, ###. »);' , но как бы вы это сделали, если вам нужно сделать более точную «100.000005», ? –
как сделать номер как 1.000 или 1.000.000 или 1.000.000.000? –