Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android – formato de la moneda de entrada con formato de 2 decimales

Necesito formatear la moneda de entrada con el ejemplo de 2 decimales de formato cuando el usuario ingrese 2 parece $ 2,00 entonces cuando cuando el usuario ingrese 2 se convierte a $ 22,00 … etc

Me acerco a algo similar, cuando el usuario introduce 2 que convertir a $ 0.02 siguiente 2 será como este $ 0.22

Cualquiera me puede ayudar a agradecerle

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) { } } } 

    3 Solutions collect form web for “Android – formato de la moneda de entrada con formato de 2 decimales”

    Creo que puedes probar lo siguiente:

    Diseño:

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

    Actividad:

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

    Con el observador de texto como el siguiente:

     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; } } } 

    Introduzca aquí la descripción de la imagen

    HI debajo del código convertirá cada número en dos decimales. El valor debe ser número, caracteres y caracteres especiales pueden causar excepción numberformat. Por favor maneje eso como usted necesitó. Gracias

      public static String formatDecimal(String value) { DecimalFormat df = new DecimalFormat("#,###,##0.00"); return df.format(Double.valueOf(value)); } 

    Mantenga el número introducido por el usuario almacenado aparte, ya que si utiliza su edittext.text tendrá más problemas.

    A continuación, utilice DecimalFormat para formatearlo como lo necesite.

    Para el primero, tal vez sea una buena manera de restaurar la entrada original en el edittext tan pronto como los usuarios empiecen a editar, de esta manera se pueden evitar problemas con la edición.

    Espero que esto ayude.

      FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.