How can I convert numbers to currency format in android

Android

Android Problem Overview


I want to show my numbers in money format and separate digits like the example below:

1000 -----> 1,000

10000 -----> 10,000

100000 -----> 100,000

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

Thanks

Android Solutions


Solution 1 - Android

Another approach :

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

format.format(1000000);

This way, it's displaying 1 000 000 € or 1,000,000 €, depending on device currency's display settings

Solution 2 - Android

You need to use a number formatter, like so:

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

Hope this helps!

Solution 3 - Android

Currency formatter.

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

Solution 4 - Android

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

Solution 5 - Android

Use this:

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

Solution 6 - Android

This Method gives you the exact output which you need:

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

Solution 7 - Android

Try the following solution:

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

The class will return a formatter for the device default currency.

You can refer to this link for more information:

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

Solution 8 - Android

Here's a kotlin Extension that converts a Double to a Currency(Nigerian Naira)

fun Double.toRidePrice():String{
    val format: NumberFormat = NumberFormat.getCurrencyInstance()
    format.maximumFractionDigits = 0
    format.currency = Currency.getInstance("NGN")

    return format.format(this.roundToInt())
}

Solution 9 - Android

Use a Formatter class For eg:

String s = (String.format("%,d", 1000000)).replace(',', ' ');

Look into: http://developer.android.com/reference/java/util/Formatter.html

Solution 10 - Android

The way that I do this in our app is this:

amount.addTextChangedListener(new CurrencyTextWatcher(amount));

And the CurrencyTextWatcher is this:

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

Now if you add this watcher to your EditText, as soon as user enter his number, the watcher decides whether it needs separator or not.

Solution 11 - Android

i used this code for my project and it works:

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

and defined class:

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

}

}

Solution 12 - Android

You can easily achieve this with this small simple library. https://github.com/jpvs0101/Currencyfy

Just pass any number, then it will return formatted string, just like that.

currencyfy (500000.78); // $ 500,000.78  //default

currencyfy (500000.78, false); // $ 500,001 // hide fraction (will round off automatically!)

currencyfy (500000.78, false, false); // 500,001 // hide fraction & currency symbol

currencyfy (new Locale("en", "in"), 500000.78); // ₹ 5,00,000.78 // custom locale

It compatible with all versions of Android including older versions!

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionnazaninView Question on Stackoverflow
Solution 1 - AndroidThomas MaryView Answer on Stackoverflow
Solution 2 - AndroiddFranciscoView Answer on Stackoverflow
Solution 3 - AndroidSamet ÖZTOPRAKView Answer on Stackoverflow
Solution 4 - AndroidAbhinayMeView Answer on Stackoverflow
Solution 5 - AndroidValentunView Answer on Stackoverflow
Solution 6 - AndroidAlireza NooraliView Answer on Stackoverflow
Solution 7 - AndroidHemil KumbhaniView Answer on Stackoverflow
Solution 8 - Androidmikail yusufView Answer on Stackoverflow
Solution 9 - AndroidKavach ChandraView Answer on Stackoverflow
Solution 10 - AndroidMohammad ZareiView Answer on Stackoverflow
Solution 11 - AndroidM.A.RView Answer on Stackoverflow
Solution 12 - AndroidJaya PrakashView Answer on Stackoverflow