Formatierung in Euro (0,00€) wiedergeben?


03.07.2023, 10:35

die 2 Methode:

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    editText.removeTextChangedListener(this);

    try {
        String originalString = s.toString();

        Long longval;
        if (originalString.contains(".")) {
            originalString = originalString.replaceAll("[€.]", "");
        }
        if (originalString.contains(".")) {
            originalString = originalString.replaceAll(".", ",");
        }
        /*if (originalString.contains(sp.getSetting()[0]+" ")) {
            originalString = originalString.replaceAll(sp.getSetting()[0]+" ", "");
        }*/
        if (originalString.contains(sp.getSetting()[0])) {
            originalString = originalString.replaceAll(sp.getSetting()[0], "");
        }
        if (originalString.contains(sp.getSetting()[0])) {
            originalString = originalString.replace(sp.getSetting()[0], "");
        }
        if (originalString.contains(sp.getSetting()[0])) {
            originalString = originalString.replace(sp.getSetting()[0], "");
        }
        /*if (originalString.contains(" ")) {
            originalString = originalString.replaceAll(" ", "");
        }*/
        longval = Long.parseLong(originalString);
        if (longval == 0) {
            editText.setText("");
            editText.setSelection(editText.getText().length());
        } else if (String.valueOf(longval).length() == 1) {
            editText.setText(String.valueOf(longval) + " " + sp.getSetting()[0]);
            editText.setSelection(editText.getText().length());
        } else if (String.valueOf(longval).length() == 2) {
            editText.setText(String.valueOf(longval) + " " + sp.getSetting()[0]);
            editText.setSelection(editText.getText().length());
        } else {

            SettingPreference sp = new SettingPreference(context);
            DecimalFormat formatter = new DecimalFormat("#,###,##");
            String formattedString = formatter.format(longval);
            editText.setText(sp.getSetting()[0] + formattedString.replace(".",","));
            editText.setSelection(editText.getText().length());
        }
    } catch (NumberFormatException nfe) {
        nfe.printStackTrace();
    }

    editText.addTextChangedListener(this);
}

1 Antwort

DecimalFormat formatter = new DecimalFormat("#,###,##");

Ist komplett falsch . Siehe https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html

Java hat eine eingebaute Funktion um eine Dezimalzahl als Euro wiederzugeben.

import java.text.NumberFormat;
import java.util.Currency;
import java.util.Locale;

Currency cr=Currency.getInstance(Locale.GERMANY);
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.GERMANY);
System.out.println(nf.format(price);