Как преобразовать числа в формат валюты в android

Я хочу показать свои цифры в денежном формате и отдельные цифры, как показано ниже:

1000 ----- > 1000

10000 ----- > 10 000

100000 ----- > 100 000

1000000 ----- > 1,000,000

Спасибо

Ответ 1

Вам нужно использовать форматирование чисел, например:

NumberFormat formatter = new DecimalFormat("#,###");
double myNumber = 1000000;
String formattedNumber = formatter.format(myNumber);
//formattedNumber is equal to 1,000,000

Надеюсь, это поможет!

Ответ 2

Форматирование валюты.

    public static String currencyFormat(String amount) {
        DecimalFormat formatter = new DecimalFormat("###,###,##0.00");
        return formatter.format(Double.parseDouble(amount));
    }

Ответ 3

Используйте это:

int number = 1000000000;
String str = NumberFormat.getNumberInstance(Locale.US).format(number);
//str = 1,000,000,000

Ответ 4

Попробуйте следующее решение:

NumberFormat format = NumberFormat.getCurrencyInstance();
((TextView)findViewById(R.id.text_result)).setText(format.format(result));

Класс вернет форматтер для валюты устройства по умолчанию.

Вы можете сослаться на эту ссылку для получения дополнительной информации:

https://developer.android.com/reference/java/text/NumberFormat.html

Ответ 5

Этот метод дает вам точный вывод, который вам нужен:

public String currencyFormatter(String num) {
    double m = Double.parseDouble(num);
    DecimalFormat formatter = new DecimalFormat("###,###,###");
    return formatter.format(m);
}

Ответ 6

double number = 1000000000.0;
String COUNTRY = "US";
String LANGUAGE = "en";
String str = NumberFormat.getCurrencyInstance(new Locale(LANGUAGE, COUNTRY)).format(number);

//str = $1,000,000,000.00

Ответ 8

Как я это делаю в нашем приложении, это:

amount.addTextChangedListener(new CurrencyTextWatcher(amount));

И CurrencyTextWatcher:

public class CurrencyTextWatcher implements TextWatcher {

private EditText ed;
private String lastText;
private boolean bDel = false;
private boolean bInsert = false;
private int pos;

public CurrencyTextWatcher(EditText ed) {
    this.ed = ed;
}

public static String getStringWithSeparator(long value) {
    DecimalFormat formatter = (DecimalFormat) NumberFormat.getNumberInstance(Locale.US);
    String f = formatter.format(value);
    return f;
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    bDel = false;
    bInsert = false;
    if (before == 1 && count == 0) {
        bDel = true;
        pos = start;
    } else if (before == 0 && count == 1) {
        bInsert = true;
        pos = start;
    }
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    lastText = s.toString();
}

@Override
public void afterTextChanged(Editable s) {
    ed.removeTextChangedListener(this);
    StringBuilder sb = new StringBuilder();
    String text = s.toString();
    for (int i = 0; i < text.length(); i++) {
        if ((text.charAt(i) >= 0x30 && text.charAt(i) <= 0x39) || text.charAt(i) == '.' || text.charAt(i) == ',')
            sb.append(text.charAt(i));
    }
    if (!sb.toString().equals(s.toString())) {
        bDel = bInsert = false;
    }
    String newText = getFormattedString(sb.toString());
    s.clear();
    s.append(newText);
    ed.addTextChangedListener(this);

    if (bDel) {
        int idx = pos;
        if (lastText.length() - 1 > newText.length())
            idx--; // if one , is removed
        if (idx < 0)
            idx = 0;
        ed.setSelection(idx);
    } else if (bInsert) {
        int idx = pos + 1;
        if (lastText.length() + 1 < newText.length())
            idx++; // if one , is added
        if (idx > newText.length())
            idx = newText.length();
        ed.setSelection(idx);
    }
}

private String getFormattedString(String text) {
    String res = "";
    try {
        String temp = text.replace(",", "");
        long part1;
        String part2 = "";
        int dotIndex = temp.indexOf(".");
        if (dotIndex >= 0) {
            part1 = Long.parseLong(temp.substring(0, dotIndex));
            if (dotIndex + 1 <= temp.length()) {
                part2 = temp.substring(dotIndex + 1).trim().replace(".", "").replace(",", "");
            }
        } else
            part1 = Long.parseLong(temp);

        res = getStringWithSeparator(part1);
        if (part2.length() > 0)
            res += "." + part2;
        else if (dotIndex >= 0)
            res += ".";
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return res;
}

Теперь, если вы добавите этого наблюдателя в свой EditText, как только пользователь вводит свой номер, наблюдатель решает, нужен ли ему разделитель или нет.

Ответ 9

я использовал этот код для моего проекта, и он работает:

   EditText edt_account_amount = findViewById(R.id.edt_account_amount);
   edt_account_amount.addTextChangedListener(new DigitFormatWatcher(edt_account_amount));

и определенный класс:

    public class NDigitCardFormatWatcher implements TextWatcher {

EditText et_filed;

String processed = "";


public NDigitCardFormatWatcher(EditText et_filed) {
    this.et_filed = et_filed;
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void afterTextChanged(Editable editable) {

    String initial = editable.toString();

    if (et_filed == null) return;
    if (initial.isEmpty()) return;
    String cleanString = initial.replace(",", "");

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

    double myNumber = new Double(cleanString);

    processed = formatter.format(myNumber);

    //Remove the listener
    et_filed.removeTextChangedListener(this);

    //Assign processed text
    et_filed.setText(processed);

    try {
        et_filed.setSelection(processed.length());
    } catch (Exception e) {
        // TODO: handle exception
    }

    //Give back the listener
    et_filed.addTextChangedListener(this);

}

}

Ответ 10

Другой подход:

NumberFormat format = NumberFormat.getCurrencyInstance();
format.setMaximumFractionDigits(0);
format.setCurrency(Currency.getInstance("EUR"));

format.format(1000000);

Таким образом, он отображает 1 000 000 € или 1,000,000 €, в зависимости от настроек отображения валюты устройства