How can I format a String number to have commas in android Edit Field

JavaAndroidStringFormat

Java Problem Overview


For what function I can use in android to display the number into different formats.

For eg: If I enter 1000 then it should display like this 1,000. If I enter 10000 then it should display like this 10,000. If I enter 1000000 then it should display like this 1,000,000.

Please guide me.

Java Solutions


Solution 1 - Java

You could use DecimalFormat and just format the number

DecimalFormat formatter = new DecimalFormat("#,###,###");
String yourFormattedString = formatter.format(100000);

The result will be

  • 1,000,000 for 1000000
  • 10,000 for 10000
  • 1,000 for 1000

Update 12/02/2019

This String.format("%,d", number) would be a better(less hardcoded) solution as indicated in the comments below by @DreaminginCode so I thought I would add it here as an alternative

Solution 2 - Java

try this one hope it will help.

 System.out.println(NumberFormat.getNumberInstance(Locale.US).format(1000));

Solution 3 - Java

private String getFormatedAmount(int amount){
  return NumberFormat.getNumberInstance(Locale.US).format(amount);
}

Solution 4 - Java

int[] numbersToFormat = new int[]
  { 1, 10, 100, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 };

		
for (int number : numbersToFormat) {
  System.out.println(  
    NumberFormat.getNumberInstance(Locale.getDefault()).format(number));
}

OUTPUT

1
10
100
10,000
100,000
1,000,000
10,000,000
100,000,000
1,000,000,000

Solution 5 - Java

Add this function in common class

  public static String getFormatedNumber(String number){
        if(!number.isEmpty()) {
            double val = Double.parseDouble(number);
            return NumberFormat.getNumberInstance(Locale.US).format(val);
        }else{
            return "0";
        }
    }

And use that function every where like this:

String newNumber = Utils.getFormatedNumber("10000000");

Solution 6 - Java

Add a text change listener as below (Also make sure that the input type selected for Edittext is Number) :

etTest.addTextChangedListener(new TextWatcher() {

		boolean isManualChange = false;

		@Override
		public void onTextChanged(CharSequence s, int start, int before,
				int count) {
			if (isManualChange) {
				isManualChange = false;
				return;
			}

			try {
				String value = s.toString().replace(",", "");
				String reverseValue = new StringBuilder(value).reverse()
						.toString();
				StringBuilder finalValue = new StringBuilder();
				for (int i = 1; i <= reverseValue.length(); i++) {
					char val = reverseValue.charAt(i - 1);
					finalValue.append(val);
					if (i % 3 == 0 && i != reverseValue.length() && i > 0) {
						finalValue.append(",");
					}
				}
				isManualChange = true;
				etTest.setText(finalValue.reverse());
				etTest.setSelection(finalValue.length());
			} catch (Exception e) {
				// Do nothing since not a number
			}
		}

		@Override
		public void beforeTextChanged(CharSequence s, int start, int count,
				int after) {
			// TODO Auto-generated method stub

		}

		@Override
		public void afterTextChanged(Editable s) {
			// TODO Auto-generated method stub

		}
	});

Solution 7 - Java

You can use Numberformat

public static double getNumberByString(String s) throws ParseException {
    return NumberFormat.getInstance(Locale.getDefault()).parse(s).doubleValue();
}

Solution 8 - Java

public static String formatNumber(int number){
    return NumberFormat.getNumberInstance(Locale.getDefault()).format(number);
}
public static String formatNumber(String number){
    return NumberFormat.getNumberInstance(Locale.getDefault()).format(Integer.parseInt(number));
}

Solution 9 - Java

I wrote this Kotlin extension function may can help.

fun String.formatPoint(): String {
    val sb = StringBuilder()
    this.reversed().forEachIndexed { index, c ->
        // 123,123,123
        if ((index + 1) % 3 == 0) {
            if (index != this.length - 1) {
                sb.append("$c,")
            } else {
                sb.append(c)
            }
        } else {
            sb.append(c)
        }
    }

    return sb.toString().reversed()
}

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
Questionuser1082964View Question on Stackoverflow
Solution 1 - Javathe-ginger-geekView Answer on Stackoverflow
Solution 2 - JavaSandeepView Answer on Stackoverflow
Solution 3 - JavaYLSView Answer on Stackoverflow
Solution 4 - JavaCodeversedView Answer on Stackoverflow
Solution 5 - JavaKushView Answer on Stackoverflow
Solution 6 - JavaEldhose M BabuView Answer on Stackoverflow
Solution 7 - JavaNail ShaykhrazievView Answer on Stackoverflow
Solution 8 - JavaAtiar TalukdarView Answer on Stackoverflow
Solution 9 - JavaEmre HamurcuView Answer on Stackoverflow